MySQL - problemas con la sintaxis de mi sentencia

   
Vista:

problemas con la sintaxis de mi sentencia

Publicado por mario athanasiadis (16 intervenciones) el 16/07/2015 22:33:22
buenas y gracias por la ayuda.
resulta que tengo un formulario de busqueda. cuando el usuario se loguea guardo la direccion, departamento y seccion a la que pertenece en tres variables de session
luego cuando entro en el formulario de busqueda paso el valor de esas tres variables de secion a tres variables locales para utilizarlas en mi sentencia SQL para mysql.
la sentencia busca un registro donde coincidan lo que el usuario proporciona mas los valores contenidos en esas tres variables.
si hay coincidencia en los 4 valores me trae el registro hasta ay todo va perfecto..
el problema es que cuando no coincide alguno de los valores me da este error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

lo raro es que lo hace bien si hay coincidencia y error si no hay coincidencia paso a postear el codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$VarDir=$_SESSION['MM_Dir'];
$VarDep=$_SESSION['MM_Dep'];
$VarSec=$_SESSION['MM_Sec'];
 
if(isset($_POST['Buscar'])=='Buscar') {
	$VarReq_BuscaReq = $_POST["NumRequisicion"];
	mysql_select_db($database_SRE, $SRE);
	$query_BuscaReq ="SELECT * FROM requisicion WHERE requisicion.NumRequisicion = '$VarReq_BuscaReq' AND requisicion.Dir = '$VarDir' AND requisicion.Depto = '$VarDep' AND requisicion.Sec = '$VarSec'";
	mysql_query("SET NAMES 'utf8'");
	$BuscaReq = mysql_query($query_BuscaReq, $SRE) or die(mysql_error());
	$row_BuscaReq = mysql_fetch_assoc($BuscaReq);
	$totalRows_BuscaReq = mysql_num_rows($BuscaReq);
	if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
 
	$VarReq_BuscaReq = $row_BuscaReq['NumRequisicion'];
	$VarReq=$row_BuscaReq['NumRequisicion'];
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

problemas con la sintaxis de mi sentencia

Publicado por leonardo_josue (81 intervenciones) el 16/07/2015 22:48:11
Hola mario athanasiadis:

Con lo que pones, no es posible determinar dónde está el problema, aunque me atrevería a decir que alguno de los parámetros que estás colocando viene vacio.

Olvidate de todo el código de PHP (que por cierto no deberías de incluir en este foro) y postea exactamente qué es lo que estás tratando de ejecutar en MySQL, es decir, imprime o recupera el valor de tu variable $query_BuscaReq antes de que la mandes a ejecutar. Puedes ejecutar esta consulta directamente en una consola de MySQL, o en el Workbench y observa el dónde está marcando el error, o postea la sentencia y con gusto te ayudamos a revisarla.

Saludos
Leo,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problemas con la sintaxis de mi sentencia

Publicado por mario (16 intervenciones) el 17/07/2015 20:17:21
ok voy a hacer lo que me recomiendas pero arriba esta posteado el problema y la sentencia sql que da el problema igual lo vuelvo a postear
1
"SELECT * FROM requisicion WHERE requisicion.NumRequisicion = '$VarReq_BuscaReq' AND requisicion.Dir = '$VarDir' AND requisicion.Depto = '$VarDep' AND requisicion.Sec = '$VarSec'";

los valores de las variables no estan viviendo vaciaos porque cuando cambio los valores en la tabla ejemplo (01, 01, 01) me trae los datos y hago un echo a las variables y me muestra esos valores. pero si cambio cualquier valor de esos ejemplo (01, 02, 01) ó (02, 01, 01) ó (01, 01, 02) y asi sucesivamente me manda el error que postee..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problemas con la sintaxis de mi sentencia

Publicado por leonardo_josue (81 intervenciones) el 17/07/2015 20:55:19
Hola de nuevo mario:

El que pongas esto, sirve absolutamente para nada...

1
2
3
4
5
6
7
8
SELECT *
FROM requisicion
WHERE
   requisicion.NumRequisicion = '$VarReq_BuscaReq' AND
   requisicion.Dir = '$VarDir' AND
   requisicion.Depto = '$VarDep' AND
   requisicion.Sec = '$VarSec'";

Si nos dices que esto funciona para ciertos valores, pero no funciona para otra combinación, POSTEA ENTONCES EL RESULTADO DE LA CONSULTA CON ESA COMBINACIÓN QUE NO FUNCIONA...

Insisto, son muchas las cosas que están fallando, sintácticamente la consulta está bien, y el hecho de que funcione con la primer combinación así lo demuestra... es por eso que ES NECESARIO QUE PONGAS EXACTAMENTE LA CONSULTA QUE SE EJECUTA CON ERROR...

es decir, yo espero que pongas algo como esto:

1
2
3
4
5
...
WHERE
   requisicion.NumRequisicion = '01' AND
   requisicion.Dir = '02'
...

El cómo recuperes esos valores es tema de PHP que NO TIENE NADA QUE VER CON MySQL... pero es muy probable que sea justamente en la forma en que recuperas esos valores en donde esté el problema...

Además, tienes que tener en cuenta que no se trata de igual manera una cadena que un número... puedo suponer que tus campos sean de tipo VARCHAR, pues de lo contrario no podrías manejar valores con 0 al inicio, entonces el manejo de las comillas es importante...

Así como le haces un ECHO a las variables, haz un ECHO a la consulta y dinos cual es... además te sugerí que ejecutaras esta consulta directamente en una consola de MySQL o de Workbench y nos dijeras qué mensajes de error aparecen...

Incluso sería conveniente que postearas la estructura de tu tabla, los tipos de dato de los campos y que pusieras algunos datos de ejemplo, de esta manera, podemos tratar de simular un ambiente semejante al que tienes e indicarte dónde está el problema.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problemas con la sintaxis de mi sentencia

Publicado por mario athanasiadis (16 intervenciones) el 20/07/2015 18:44:23
la consulta cuando funciona es esta:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT *
 
FROM requisicion
 
WHERE
 
   requisicion.NumRequisicion = '$VarReq_BuscaReq' AND
 
   requisicion.Dir = '02 AND

   requisicion.Depto = '01' AND

   requisicion.Sec = '01'";

y cuando no funciona es:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT *
 
FROM requisicion
 
WHERE
 
   requisicion.NumRequisicion = '$VarReq_BuscaReq' AND
 
   requisicion.Dir = '02' AND
 
   requisicion.Depto = '01' AND
 
   requisicion.Sec = '00'";

me escribistes esto:
Si nos dices que esto funciona para ciertos valores, pero no funciona para otra combinación, POSTEA ENTONCES EL RESULTADO DE LA CONSULTA CON ESA COMBINACIÓN QUE NO FUNCIONA...

pero no puedo postearlos porque lo que sale es esto:

Resource id #4You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

en la estructura de los campos que intervienen en el query :
NumRequisicion es un Int length 10
dir es un varchar length 2
Depto es un varchar length 2
Sec es un varchar length 2

los valores contenidos en esos campos son 00 01 02 en combinaciones
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problemas con la sintaxis de mi sentencia

Publicado por mario athanasiadis (16 intervenciones) el 20/07/2015 19:04:51
perdon la linea de error era esta con el print:
SELECT * FROM requisicion WHERE requisicion.NumRequisicion = '150' AND requisicion.Dir = '02' AND requisicion.Depto = '01' AND requisicion.Sec = '01'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

y esta es la linea cuando no da error con el print:
SELECT * FROM requisicion WHERE requisicion.NumRequisicion = '118' AND requisicion.Dir = '02' AND requisicion.Depto = '01' AND requisicion.Sec = '01'

el registro 150 de la primera linea en la tabla tiene estos valores:

150 02 01 00


lo que deberia pasar es que no trajera nada porque los datos no coinciden...
no un error de syntax..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problemas con la sintaxis de mi sentencia

Publicado por leonardo_josue (81 intervenciones) el 20/07/2015 20:16:03
Hola de nuevo:

La consulta como tal no tiene nada de malo, sin embargo hay algunas cosas que tienes que revisar.

1. Si ejecutas la sentencia que dices que marca error en una consula de MySQL o en el Workbench, ¿también marca error?. Si en la consola no marca error entonces el problema es el PHP.
2. Si tu campo NumRequisicion es de tipo entero, entonces NO MANEJES COMPARACIONES CON COMILLAS... lo correcto es poner las condiciones así:

1
2
3
4
5
...
WHERE
   requisicion.NumRequisicion = 118 AND
   requisicion.Dir = '02' AND
   requisicion.Depto = '01'


de esta manera evitas que el DBMS haga conversiones implícitas.

3. Estás seguro de que el error lo marca al tratar de ejecutar la consulta? o el error lo marca después de ejecutar la consulta y tratar de revisar los resultados.
4. El error lo marca desde una primer instancia de tu página? o haces o al volver a llamar la página?, si es el segundo caso, verifica que las variables no queden con basura.
5. El que pongas el nombre de tu tabla al hacer referencia de los campos en el WHERE, es completamente innecesario ya que sólo estás utilizando una tabla. Puedes quitarlos sin ningun problema, dejando sólo el nombre del campo:

1
2
3
4
5
...
WHERE
   NumRequisicion = 118 AND
   Dir = '02' AND
   Depto = '01'


Este error que comentas, sucede cuando la sentencia SQL no está completa, o cuando al final de la consulta tiene algún caracter basura;

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT id_1, descripcion
    -> FROM tabla1;
+------+-------------+
| id_1 | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | dos         |
|    3 | tres        |
|    4 | cuatro      |
+------+-------------+
4 rows in set (0.00 sec)

Por eso decía que era probable que alguno de los parámetros viniera como vacío y tu sentencia quedaría algo así:

1
2
3
4
5
6
mysql> SELECT id_1, descripcion
    -> FROM tabla1
    -> WHERE id_1 = 1 OR id =;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '' at
line 3

Pon especial atención en el punto 1, ejecutando la sentencia en la consola de MySQL podrás determinar si el problema está en la consulta, en los datos de tu tabla o si es un problema de PHP.

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problemas con la sintaxis de mi sentencia

Publicado por mario athanasiadis (16 intervenciones) el 20/07/2015 21:26:03
WHERE

requisicion.NumRequisicion = 118 AND

requisicion.Dir = '02' AND

requisicion.Depto = '01'


ok esto se ve asi en el print que hice para ver los valores pero en realidad los valores vienen de variables asi:

WHERE

requisicion.NumRequisicion = '$VarReq_BuscaReq' AND

requisicion.Dir = '$VarDir' AND

requisicion.Depto = '$VarDep'

requisicion.Sec = '$VarSec'

por eso salen las comillas si no le pongo comillas me da error de syntaxis

los valores de $VarDir', $VarDep y $VarSec vienen de variables globales que se generan al logearse el usuario el sistema busca en la tabla usuarios los codigos de la direccion departamento y seccion a que pertenece ese usuario y los agrega en las variables globales luego cargo ese valor en estas tres variables.

$VarDir=$_SESSION['MM_Dir'];
$VarDep=$_SESSION['MM_Dep'];
$VarSec=$_SESSION['MM_Sec'];

y la variable $VarReq_BuscaReq se llena con el valor obtenido del campo de busqueda:

$VarReq_BuscaReq = $_POST["NumRequisicion"];

me estoy volviendo loco con esto...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problemas con la sintaxis de mi sentencia

Publicado por leonardo_josue (81 intervenciones) el 20/07/2015 21:32:46
Otra vez insisto, NO CONFUNDAS PHP CON MYSQL, son dos cosas absolutamente distintas que no tienen nada que ver la una con la otra... El cómo pongas tus variables en PHP es cuestión de PHP y nada más... si ahí necesitas poner comillas, eso es cuestión de PHP, no de MySQL... para MySQL lo que debes poner es como está al inicio.

Sigues sin contestar lo que te he pedido desde un inicio, ¿ya probaste la consulta en una consola de MySQL?

Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problemas con la sintaxis de mi sentencia

Publicado por mario athanasiadis (16 intervenciones) el 21/07/2015 15:35:49
gracias por tenerme paciencia.. gracias a dios por gente como tu hermano..

corri el query en un manejador de querys para Mysql :
esta es el query:

SELECT * FROM requisicion WHERE requisicion.NumRequisicion = 120 AND requisicion.Dir = '01' AND requisicion.Depto = '01' AND requisicion.Sec = '01'

funciona perfecto use o no las comillas para el primer dato.
no da error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problemas con la sintaxis de mi sentencia

Publicado por leonardo_josue (81 intervenciones) el 21/07/2015 15:50:43
Luego entonces el problema no es con la consulta, sino alguna cuestión de PHP...

Asegúrate nuevamente que la consulta que estás contruyendo quede exactamente como la probaste en la consola de MySQL, que no haya basura, que no te falte ningún parámetro y que todos los parámetros tengan valor.

Si continuas con problema, igual te conviene postear tu código PHP en el foro correspondiente:

http://www.lawebdelprogramador.com/foros/PHP/index1.html

Ya que en este foro no están todos los expertos que pudieran ayudarte... hay personas (y me incluyo) que no sabemos de PHP aunque trabajamos con MySQL.

Saludos y ánimo, que ya está mas cerca la solución a tu problema.
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

problemas con la sintaxis de mi sentencia

Publicado por mario athanasiadis (16 intervenciones) el 21/07/2015 16:11:06
gracias amigo me has ayudado un monton el problema en efecto estaba en el php ya lo he resuelto... gracias un millon por ayudarme .. que suerte que existan personas como tu...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problemas con la sintaxis de mi sentencia

Publicado por leonardo_josue (81 intervenciones) el 21/07/2015 16:50:22
No hay nada que agradecer, me da gusto que hayas dado con el problema...

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar