Foros del Web » Programando para Internet » PHP »

Error mysql_query("UPDATE ...

Estas en el tema de Error mysql_query("UPDATE ... en el foro de PHP en Foros del Web. Hola! Soy nuevo aquí, igual que en mundo del PHP y MYSQL. Estoy haciendo un pequeño script que me lanza un error como el siguiente: ...
  #1 (permalink)  
Antiguo 23/07/2013, 13:48
 
Fecha de Ingreso: julio-2013
Mensajes: 8
Antigüedad: 10 años, 8 meses
Puntos: 0
Pregunta Error mysql_query("UPDATE ...

Hola! Soy nuevo aquí, igual que en mundo del PHP y MYSQL.

Estoy haciendo un pequeño script que me lanza un error como el siguiente:

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

Os dejo el codigo a ver si alguien me puede ayudar!

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Código MySQL:
Ver original
  1. #reformulada para claridad
  2. SELECT id_attribute, quantity
  3. FROM zm_product_attribute INNER JOIN zm_product_attribute_combination
  4. USING (id_product_attribute)
  5. WHERE id_attribute IN ('$id_size','$id_color')
  6. AND id_product = '$id_product'
  7. GROUP BY id_attribute
  8.  
  9. UPDATE $modelo SET quantity='$quantity'

Muchas gracias!! Espero vuestras respuestas con ganas

Última edición por gnzsoloyo; 23/07/2013 a las 14:49 Razón: Código de programación no permitido en foros de Bases de Datos
  #2 (permalink)  
Antiguo 23/07/2013, 14:25
 
Fecha de Ingreso: febrero-2004
Ubicación: Guatemala
Mensajes: 117
Antigüedad: 20 años, 2 meses
Puntos: 2
Respuesta: Error mysql_query("UPDATE ...

Hola, se me ocurre que intentes desplegar todo el texto del query antes de ejecutarlo y ver si no tienes alguna comilla simple o doble de mas.
  #3 (permalink)  
Antiguo 23/07/2013, 14:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error mysql_query("UPDATE ...

No postees código de programación en foros de BBDD. No está permitido (ver las normas del subforo)

Captura la query generada y postea el contenido real.
El 99% de los problemas proviene en casos como el tuyo en que las variables no contienen lo que crees que contienen y generan errores sintácticos indetectables.
Esa es una de las razones por las que no se permite.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 24/07/2013, 04:38
 
Fecha de Ingreso: julio-2013
Mensajes: 8
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Error mysql_query("UPDATE ...

Buenas,

Perdonad mi ignorancia, no sabía como ponerlo... Gracias por la modificación!

Yendo al tema, como captura la query generada?

Muchas gracias a los dos! ;)
  #5 (permalink)  
Antiguo 24/07/2013, 05:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error mysql_query("UPDATE ...

Pues simplemente debes mostrar de alguna forma en pantalla lo que queda en la variable donde la almacenas, y luego copiarla.
Cuando hayas hecho eso, postealá acá, a menos que el error te resulte evidente en ese momento.
El 99% de las veces se producen porque las variables no contienen lo que el programador cree. A veces están vacías, y otras contienen valores que rompen la sintaxis de SQL.
verifica lo que las variables contienen.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 24/07/2013, 07:06
 
Fecha de Ingreso: febrero-2004
Ubicación: Guatemala
Mensajes: 117
Antigüedad: 20 años, 2 meses
Puntos: 2
Respuesta: Error mysql_query("UPDATE ...

Guarda toda la consulta en una variablle y luego pones:

echo $variable;

Saludos cordiales
jlh
  #7 (permalink)  
Antiguo 24/07/2013, 17:57
 
Fecha de Ingreso: julio-2013
Mensajes: 8
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Error mysql_query("UPDATE ...

Hola!

He puesto un echo $modelo; i lo que imprime es esto: Resource id #3

Lo que sale del select tendrian que ser dos registros, lo que no se es que significa lo que imprime.

Gracias!
  #8 (permalink)  
Antiguo 24/07/2013, 18:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error mysql_query("UPDATE ...

Significa que no has entendido lo que tienes que imprimir.
Debes imprimir el texto armado de la consulta. No el resultado.
El problema se te da porque en un momento dado la variable contiene basura o esta vacía.

Si quieres tratar el tema analizandolo en PHP, te muevo el post al foro de ese lenguaje, porque seria OFF TOPIC en este foro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 25/07/2013, 07:53
 
Fecha de Ingreso: febrero-2004
Ubicación: Guatemala
Mensajes: 117
Antigüedad: 20 años, 2 meses
Puntos: 2
Respuesta: Error mysql_query("UPDATE ...

La forma de mostrar el query es mas o menos asi

$query = "";

luego vas agregandole tus instricciones

$query .= " select * from bla bla bla ";

al final pones

echo $query;

Saludos
  #10 (permalink)  
Antiguo 05/08/2013, 07:57
 
Fecha de Ingreso: julio-2013
Mensajes: 8
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Error mysql_query("UPDATE ...

Gracias a todos por la ayuda! Ya he sabido imprimir la consulta y lo que me sale es esto:

SELECT id_attribute, quantity FROM zm_product_attribute INNER JOIN zm_product_attribute_combination USING (id_product_attribute) WHERE id_attribute IN ('1','17') AND id_product = '7' GROUP BY id_attribute

Gracias!
  #11 (permalink)  
Antiguo 05/08/2013, 09:32
 
Fecha de Ingreso: febrero-2004
Ubicación: Guatemala
Mensajes: 117
Antigüedad: 20 años, 2 meses
Puntos: 2
Respuesta: Error mysql_query("UPDATE ...

Si tienes algun cliente sql com phpmyadmin ejecutalo y ve el error que genera la consulta.
__________________
Saludos cordiales
Juan Luis Herrera
IT Guatemala CA
  #12 (permalink)  
Antiguo 18/08/2013, 11:04
 
Fecha de Ingreso: julio-2013
Mensajes: 8
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Error mysql_query("UPDATE ...

Hola hluishg!

La consulta me la genera correctamente. Me sale un resultado de 2 registros.

Que más puedo hacer?
  #13 (permalink)  
Antiguo 19/08/2013, 06:33
 
Fecha de Ingreso: febrero-2004
Ubicación: Guatemala
Mensajes: 117
Antigüedad: 20 años, 2 meses
Puntos: 2
Respuesta: Error mysql_query("UPDATE ...

Que extraño, estas seguro que es esta consulta la que genera el error. Usualmente lo que hago para 'debugear' es algo asi:

print_r( "anttes de consulta" );
- - sentencia sql
print_r("luego de consulta");

si la consulta esta bien veras los dos mensajes, si no, solo el primero, ya que puede ser que tu error este en otra consulta.
__________________
Saludos cordiales
Juan Luis Herrera
IT Guatemala CA
  #14 (permalink)  
Antiguo 19/08/2013, 07:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error mysql_query("UPDATE ...

Cita:
Iniciado por webcreacio Ver Mensaje
Hola hluishg!

La consulta me la genera correctamente. Me sale un resultado de 2 registros.

Que más puedo hacer?
Por empezar, postear las cosas como se te piden...

Vamos por el principio de todo:
- Si MySQL devuelve un error sintáctico, entonces hay un error de sintaxis producto de algo, y esto sólo puede darse por dos causas: 1) Efectivamente existen un error de sintaxis de SQL., o 2) La sintaxis SQL está bien en lo general, pero se produce un error de sintaxis causado por el contenido de las variables.
- Que la sintaxis es correcta, hasta lo que se puede ver dentro del SQL embebido en PHP que usas, se puede confirmar a simple vista.
- Si la prueba exitosa que mencionas, la hiciste tomando ese código, y reemplazando las variables manualmente, sólo nos confirma el punto anterior, que la sintaxis es correcta, pero no nos dice nada de las variables.
- Además no has explicado cómo hiciste la prueba, cómo creaste la sentencia que probase, ni tampoco qué datos usaste para ello. Es decir: Información parcial e insuficiente.
- Si la consulta fue capturada como indicas en uno de los posts, y con esa sintaxis se ejecuta bien, entonces no debería fallar, por lo que sólo hay dos posibilidades: 1) El fallo no es constante y sólo se produce cuando entran ciertos datos.
2) El fallo es constante y en ese caso se produce en alguna fase posterior a la creación de la consulta, en el PHP.

En resumen:

Postea el código completo que usas desde la toma de las variables, pasando por la creación de la consulta y hasta después de ejecutar la misma en MySQL.
O sea: Postea todo. De lo contrario no tendremos un panorama claro de lo que tú estás viendo y haciendo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 19/08/2013, 13:20
 
Fecha de Ingreso: julio-2013
Mensajes: 8
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Error mysql_query("UPDATE ...

Hola Gnzsoloyo!

Explico paso a paso lo que me pasa.

Tengo un script nombre.php el cual hace lo siguiente:

1. Se conecta a una base de datos, selecciono la base de datos en la que haremos consultas.

2. Determino unas variables, en este caso de prueba, manualmente

//Variables
$id_size = 1;
$id_color = 17;
$id_product = 7;
$quantity = 50;

3. Hago un INNER JOIN de dos tablas

//hacemos JOIN de dos tablas
$attribute_table = "zm_product_attribute INNER JOIN zm_product_attribute_combination USING (id_product_attribute)";

4. Hago la consulta SELECT sobre estas tablas, me retorna 2 registros. Probado con phpmyadmin y me retorna lo esperado.

//hacemos un SELECT
$modelo = mysql_query("SELECT id_attribute, quantity FROM $attribute_table
WHERE id_attribute IN ('$id_size','$id_color')
AND id_product = '$id_product' GROUP BY id_attribute") or die (mysql_error());


5. Hasta este punto todo correcto, però cuando ejectuo el select para modificar el quantity de los dos registros obtenidos como resultado.

AQUÍ ES DONDE ME SALTA EL ERROR!

//hacemos un UPDATE de los resultados obtenidos en el SELECT
$update = mysql_query("UPDATE $modelo SET quantity='$quantity'") or die(mysql_error());

El error que me muestra es el siguiente:

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

Espero haberme explicado con detalle y simplicidad!

Gracias por todo! Espero impaciente vuestra ayuda :)
  #16 (permalink)  
Antiguo 19/08/2013, 13:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error mysql_query("UPDATE ...

Bueno, ahora está un poquito más claro, y el tema pasa porque estás haciendo dos cosas mal... Ambas en PHP.
Han movido el post de nuevo a MySQL, por lo que para no perder tiempo, te responderé aquí, haciendo la salvedad que un tema no es asunto de este foro, sino del otro (PHP).

Por empezar, en ningún momento has hecho algo que te hemos pedido repetidamente: Captura la sentencia creada en PHP, y muestranos cómo está escrita. Es decir, lo que MySQL está realmente recibiendo.
Hacer eso es simple. Esto es lo que te pedimos repetidamente:
Código PHP:
Ver original
  1. //hacemos JOIN de dos tablas
  2. $attribute_table = "zm_product_attribute INNER JOIN zm_product_attribute_combination USING (id_product_attribute)";
  3.  
  4.  
  5. //ESTO ES LO QUE TE PEDIMOS Y NO HICISTE:
  6.  
  7. echo "SELECT id_attribute, quantity FROM $attribute_table WHERE id_attribute IN ('$id_size','$id_color') AND id_product = '$id_product' GROUP BY id_attribute";
  8.  
  9. // CON ESTO HUBIESEMOS VISTO LA CONSULTA EJECUTADA.
  10.  
  11. //hacemos un SELECT
  12. $modelo = mysql_query("SELECT id_attribute, quantity FROM $attribute_table
  13. WHERE id_attribute IN ('$id_size','$id_color')
  14. AND id_product = '$id_product' GROUP BY id_attribute") or die (mysql_error());
¿Lo hiciste?
No.

Pero además, necesitabamos que hicieras esto:
Código PHP:
Ver original
  1. echo "UPDATE $modelo SET quantity='$quantity'
Porque era en esta donde se produce el problema.
¿Lo hiciste?
No, tampoco lo hiciste.

Afortunadamente, has puesto una parte del problema a la vista (recién ahora) y se alcanza a inferir lo que te está pasando, y que es un tema de PHP.
Volvamos a la última sentencia.
¿Qué es, de dónde surge y qué valor tiene esa variable $modelo?
Bueno, por lo que parece, surge de aquí:
Código PHP:
Ver original
  1. $modelo = mysql_query("SELECT id_attribute, quantity FROM $attribute_table WHERE id_attribute IN ('$id_size','$id_color')
  2. AND id_product = '$id_product' GROUP BY id_attribute") or die (mysql_error());
Por lo que pones, $modelo no contiene una sentencia, sino que es un result de un mysql_query(). Esto implica que es un objeto no SQL, cuyo valor (me atrevo a suponer), sería un número uno (1), dado que por definición un result , según el manual:
Cita:
Para SELECT, SHOW, DESCRIBE, EXPLAIN y otras sentencias que retornan un conjunto de resultados, mysql_query() retorna un resource en caso de éxito, o FALSE en caso de error.
Entonces suponemos que si convertimos el result en un numero será un uno (true), y por tanto la segunda sentencia (UPDATE) quedaría escrita así:
Código MySQL:
Ver original
  1. UPDATE 1 SET quantity='50'
lo que está simplemente mal...
Si al menos hubieses realizado el "echo" antes de ejecutar eso, desde el principio de todo, hubiésemos visto el error desde el inicio, y no nos hubiéramos metido en análisis innecesarios.

¿Se entiende lo que te digo?

Creo que lo te está faltando es conocer exactamente cómo se usan las librerías de acceso a datos en PHP...

Consejos:
1) No generes directamente las sentencias en un mysql_query(). Crealas en una variable, que puedas evaluar mejor, y ejecuta luego las llamadas con esas variables.
2) No confundas el result con la sentencia.
3) Crea las sentencias con toda su sintaxis, con los elementos necesarios. Si el UPDATE hubiese dado un resultado sintácticamente lícito, esto es, que $modelo contuviese el nombre de una tabla, la sentencia hubiese puesto un "50" en el campo "quantity" de todos los registros de esa tabla, porque tu UPDATE no tiene ningún WHERE que lo condicione.
4) Ten en cuenta que lo que hagas en PHP no lo reconoce MySQL. SOn lenguajes diferentes e independientes. Que en un result obtengas los nombres de una o mas tablas, es irrelevante para MySQL, porque MySQL no admite arrays, entonces debes transformar ese array asociativo obtenido en algo que sirva para crear sentencias de SQL.
5) Por sobre muchas otras cosas, cuando se te pida que postees el código completo, haz exactamente lo que se te pide. Nosotros no podemos adivinar lo que escribiste, especialmente si lo que codificaste no es razonable o correcto. Nosotros suponemos que seguiste cierta lógica de codificación que al menos encuentras en los tutoriales (y no fue el caso), por lo que asumimos que seguiste ciertos pasos lógicos, que en este caso no están.

No es mala intención, es simplemente que uno no empieza a suponer que un código no siga al menos cierta estructura habitual. Al menos algo sacado de un manual o de otros ejemplos (de las FAQs, por ejemplo).

¿Se entiende la idea?

Muevo nuevamente a PHP, para que podamos seguir hablando de PHP, y no de MySQL, porque el problema evidentemente está en ese nivel.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 19/08/2013 a las 14:01
  #17 (permalink)  
Antiguo 28/08/2013, 08:08
 
Fecha de Ingreso: julio-2013
Mensajes: 8
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Error mysql_query("UPDATE ...

Hola Gnzsoloyo,

Quedan muy claras tus explicaciones y lamento los error, por falta de entendimiento de vuestras peticiones, que he hecho a la hora de explicarme. Espero poco a poco ir dejando las cosas más claras y poder llegar al objetivo final que es que me funcione correctamente este script.

Lo que yo necessito es hacer un UPDATE modificando el atributo Quantity, por otro, de los registros obtenidos en el SELECT.

Lo que no consigo entender es como de la tabla que yo tengo solo modificar unos registros determiandos (los que me da como resultado en el SELECT).

Lo que tampoco entiendo es que hacer para que la variable $modelo sea una tabla con los registros obtenidos en el SELECT y al hacer el UPDATE se me modifique en la tabla de mi base de datos, almacenda en mi hosting.

Espero poco a poco ir explicandome mejor, es la primera vez que trabajo con PHP y MYSQL de forma totalmente autodidacta y desconozco muchos conceptos.

Muchas gracias por vuestra ayuda totalmente altruista,

Espero vuestra respuesta! :)
  #18 (permalink)  
Antiguo 29/08/2013, 08:27
 
Fecha de Ingreso: julio-2013
Mensajes: 8
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Error mysql_query("UPDATE ...

Hola!

He cambiado un poco el código y ahora lo tengo así:

Código PHP:
$bdd "zapateriasmargall";

$conexion mysql_connect(localhostmyzapaterimargall1) or die(mysql_error());
mysql_select_db($bdd,$conexion) or die(mysql_error());

//Variables
$id_size 1;
$id_color 17;
$id_product 7;
$quantity 50;

//hacemos JOIN de dos tablas
$attribute_table "zm_product_attribute INNER JOIN zm_product_attribute_combination USING (id_product_attribute)";

//hacemos un SELECT
$select "SELECT id_attribute, quantity FROM $attribute_table 
                        WHERE id_attribute IN ('$id_size','$id_color') 
                        AND id_product = '$id_product' GROUP BY id_attribute"
;
echo 
'<br>' $select '<br>';
                        
$result "UPDATE $select SET quantity='$quantity'";

echo 
'<br>' $result '<br>' '<br>';
mysql_query($result,$conexion) or die (mysql_error()); 
Los resultados de los echo y error son los siguientes:

Código PHP:
SELECT id_attributequantity FROM zm_product_attribute INNER JOIN zm_product_attribute_combination USING (id_product_attributeWHERE id_attribute IN ('1','17') AND id_product '7' GROUP BY id_attribute

UPDATE SELECT id_attribute
quantity FROM zm_product_attribute INNER JOIN zm_product_attribute_combination USING (id_product_attributeWHERE id_attribute IN ('1','17') AND id_product '7' GROUP BY id_attribute SET quantity='50'

You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT id_attribute, quantity FROM zm_product_attribute INNER JOIN zm_product_at' at line 1 
Que estoy haciendo mal?

El SELECT y UPDATE estan bien escritos no?

Gracias
  #19 (permalink)  
Antiguo 29/08/2013, 09:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error mysql_query("UPDATE ...

La sentencia de SELECT está bien escrita, pero en la de UPDATE estás entremezclando el UPDATE con el SELECT, y no operaciones que no tienen ninguna relación.

Código MySQL:
Ver original
  1. SELECT   id_attribute, quantity
  2.     FROM zm_product_attribute INNER JOIN zm_product_attribute_combination
  3.          USING (id_product_attribute)
  4.    WHERE id_attribute IN ('1', '17')
  5.      AND id_product = '7'
  6. GROUP BY id_attribute
Esto está bien.

Esto no tiene ningún sentido:
Código MySQL:
Ver original
  1. UPDATE SELECT id_attribute, quantity
  2. FROM zm_product_attribute INNER JOIN zm_product_attribute_combination USING (id_product_attribute)
  3. WHERE id_attribute IN ('1','17') AND id_product = '7'
  4. GROUP BY id_attribute SET quantity='50'

Debes tomar el manual de referencia y leer la sintaxis de UPDATE, no simplemente sumar variables donde creas una y otra... Son sentencias con sintaxis distinta.

http://dev.mysql.com/doc/refman/5.0/es/update.html

Voy a hacer una suposición, porque para escribirla correctamente y para el caso específico, necesitaría conocer con exactitud la estructura y relaciones de ambas tablas.
Esto está sintácticamente bien (repito, no sé si es correcta por las columnas que usas):
Código MySQL:
Ver original
  1. UPDATE zm_product_attribute_combination B INNER JOIN zm_product_attribute C USING(id_product_attribute)
  2.     SET B.quantity='50'
  3. WHERE C.id_attribute IN ('1','17')
  4.     AND B.id_product = '7'
¿Se entiende la diferencia entre ambas?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: mysql, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:33.