2011-07-17 25 views
5

Al ejecutar una instrucción SQL, tales como INSERT INTO table ... ON DUPLICATE KEY UPDATE ... me baso en mysql_affected_rows() para determinar si se llevó a cabo una inserción o una actualización. como el sitio de MySQL en http://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html, se indica:mysql_affected_rows() devuelve -1

para INSERT ... ON UPDATE copia de la llave, el valor de registros afectados es 1 si la fila se inserta como una nueva fila y 2 si una fila existente esta actualizado

Todo trabajaba bien hasta que pasaron a MySQL 5.1.16, cuando el número de consultas ahora tenían mysql_affected_rows() devolver UNO MENOS (-1)

La solución propuesta en el sitio de MySQL en http://dev.mysql.com/doc/refman/5.1/en/mysql-store-result.html es llamar la función mysql_store_result() después de cada ejecución de la función mysql_query() en una consulta de selección.

Sin embargo, PHP no parece tener dicha función definida.

¿Cómo consigo que mysql_affected_rows() funcione correctamente usando PHP y MySQL 5.1.16?

+0

¿Está utilizando declaraciones preparadas? Por cierto, PHP tiene la función store_result - http://php.net/manual/en/mysqli.store-result.php, pero store_result es llamado después de SELECTs, no después de INSERTs. * -1 indica que la consulta arrojó un error o que, para una consulta SELECT, se invocó a mysql_affected_rows() antes de llamar a mysql_store_result() * –

+0

También tengo este problema ... –

Respuesta

2

mysql_affected_rows devuelve -1 si la última consulta falló. Verificaría sus consultas y/o conexión a la base de datos. Ver this link.

4

En general, si mysql_affected_rows() devuelve -1, significa que la consulta ha fallado (consulte manual page para obtener más información). Puede verificar el error llamando al mysql_error(), pero debería haber recogido el error cuando llamó al mysql_query() antes de llegar al punto de averiguar cuántas filas se vieron afectadas.

Puesto que usted está preguntando acerca de la función store_result, permítanme también la respuesta que parte de su pregunta:

módulo de PHP MySQL puede no tener una función store_result, pero el nuevo módulo de MySQLi hace. Consulte http://php.net/manual/en/mysqli.store-result.php

En general, se recomienda cambiar el uso de las funciones mysql_xxx a las funciones equivalentes mysqli_xxx de todos modos, por lo que esta sería una oportunidad perfecta para hacerlo.

No necesita actualizar su versión de PHP para esto, ya que el módulo MySQLi se introdujo con PHP 5.0. Sin embargo, sugeriría considerar una actualización, sin embargo, si está utilizando PHP 5.1, está utilizando una versión que ya no cuenta con soporte por más de cinco años.

Cuestiones relacionadas