Ver Mensaje Individual
  #16 (permalink)  
Antiguo 19/08/2013, 13:53
Avatar de gnzsoloyo
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, 5 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