¿Por qué UPDATE utilizado después de SELECT clasifica 2 filas en lugar de una?

Esto es muy raro y me está volviendo loco, tengo una lista de fabricantes que deben actualizarse de vez en cuando. Debo seleccionar la más antigua actualizada y luego escribir la hora actual como la última vez que la actualicé.

El problema es que la consulta de actualización ACTUALIZA DOS FILAS, en lugar de una. Actualiza la fila con el id_ fabricante correcto y también el siguiente.

OTRA COSA ES QUE TODO FUNCIONA NORMALMENTE SI PONGO UN ECHO ENTRE LAS DOS CONSULTAS.

Lo probé en un servidor Mac XAMPP, en un servidor XAMPP de Windows y en un servidor Linux (Hostgator). Funciona como se esperaba solo en el servidor de Windows, en Mac y Linux la consulta de actualización afecta a 2 filas en lugar de una.

Por favor prueba el siguiente script:

crea un archivo test.php y pega el siguiente código:

 $connection = mysql_connect('localhost', 'root', '') or die("Unable to connect to MySQL"); $select = mysql_select_db('test',$connection) or die("Could not select test"); $sql = ' SELECT manufacturer_id FROM manufacturer ORDER BY last_update LIMIT 1 '; $query = mysql_query($sql, $connection); $manufacturer = mysql_fetch_assoc($query); //echo $manufacturer['manufacturer_id']; $sql = 'UPDATE manufacturer SET last_update = '.time().' WHERE manufacturer_id ='. $manufacturer['manufacturer_id']; mysql_query($sql, $connection); 

cree una prueba de base de datos y ejecute la siguiente consulta SQL para crear los manufacturers tablas:

 CREATE TABLE `manufacturer` ( `manufacturer_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `last_update` bigint(15) DEFAULT NULL, PRIMARY KEY (`manufacturer_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; LOCK TABLES `manufacturer` WRITE; /*!40000 ALTER TABLE `manufacturer` DISABLE KEYS */; INSERT INTO `manufacturer` (`manufacturer_id`, `last_update`) VALUES (1,0), (2,0), (3,0), (4,0); /*!40000 ALTER TABLE `manufacturer` ENABLE KEYS */; UNLOCK TABLES; 

Llame a test.php y luego verifique la tabla para ver cuántas filas se han visto afectadas. Si solo se ve afectada una fila, funciona como se espera en su servidor (probablemente Windows).

Si dos filas se ven afectadas, también tiene el mismo comportamiento extraño en su servidor. Ahora desmarca la línea de eco y verás que funciona como se espera ahora. ¡¡¡Loca!!!

¿Que es esto? Es como si alguien estuviera jugando malas pasadas conmigo. ¿Alguien tiene alguna idea de por qué está pasando esto?

¿Crees que esto tiene algo que ver con algún caché de mysql o algo así?

¡Muchas gracias por tu ayuda!

Gracias a Mark B (ver comentarios) descubrí que el navegador era la causa. Más exactamente el complemento de FirePHP en Chrome. Después de deshabilitarlo, todo volvió a la normalidad.

Por alguna razón, firePHP hace que el navegador llame a la página dos veces cuando no se hace eco.