Fallo tonto en script que no soy capaz de ver
Tengo un campo en una BD que tiene tanto el nombre como el apellido juntos y los quiero separar en 2 campos nuevos, customers_firstname y customers_lastname, este es el código que tengo ahora mismo:
conectaSQL();
$q="SELECT customers_id, customers_lastname FROM customers";
$r=exeQuery($q);
while(list($id, $nombre)=mysql_fetch_row($r)){
$array = explode(chr(32),$nombre);
$name= $array[0];
$surname= $array[1].' '.$array[2];
$q="UPDATE customers SET customers_firstname ='$name' WHERE customers_id=$id";
$r=exeNonQuery($q);
}
desconectaSQL();
En el momento de actualizar los nombres en la BD me da error y solo actualiza el primero de los nombres
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in nombre.php on line 35
Se que debe de ser una tontería que no estoy viendo!
Enrique Gonzalez
pero ese script da por hecho que los nombres siempre están compuestos de tres palabras, ¿que pasa con los Juan Carlos y las Mari Nieves? :-)
guitobon
¿Por que no hace solo una query en vez de n+1?
Eso de meter querys dentro de bucles que dependen del numero de filas de la BD, esta en proceso de ser considerado "pecado mortal y condena a fuego eterno" :-)
conectaSQL();
$q="UPDATE customers SET customers_firstname =\"SUBSTRING(customers_lastname,SUBSTRING_INDEX(customers_lastname,' ',0))\"";
$r=exeQuery($q);
desconectaSQL();
Para simplificar como dice Enrique, estoy suponiendo nombres simples.
Csardelacal
Hola Rodrerick!
La verdad es que no se donde estas cometiendo el fallo pero pero el error (a parte del error de logica de los nombres compuestos) te viene de un error de sintaxis en la primera query...
Lo que te esta diciendo la maquina es que MySQL ha devuelto un error y por eso $r no es un "resource" sino un booleano puesto a falso.
Seguramente si le modificas esto:
$q="SELECT customers_id, customers_lastname FROM customers";
$r=exeQuery($q);
a esto:
$q="SELECT customers_id, customers_lastname FROM customers";
$r=exeQuery($q);
if (!$r) echo mysql_error();
El servidor te devuelva un mensaje más util... Recuerda que no debes dejarlo en entornos de producción o puedes tener a algun Hacker que se aproveche de ello.