una registros numero num_rows mysqli_num_rows mysqli_affected_rows mysql_num_rows filas ejemplos contar consulta afectadas php mysql mysqli

registros - php mysqli filas afectadas devuelve resultado incorrecto después de eliminar instrucción



num_rows php (2)

Tengo una función para eliminar una fila de mi tabla y me gusta volver verdadero si la fila existía antes. Utilizo la siguiente función para lograr eso:

$mysqli = $this->mysqli; $stmt = $mysqli->prepare("DELETE FROM active_clients WHERE token LIKE ?"); $stmt->bind_param(''s'', $token); $stmt->execute(); if($stmt->affected_rows < 1){ $stmt->close(); return false; } $stmt->close(); return true;

También funcionó correctamente en mi host local pero cuando me moví al servidor vivo no devuelve el resultado correcto. affected_rows devuelve siempre 0 pero la fila se elimina como debería ser. ¿Cómo puede ser? ¿Podría haber un problema con la versión php? Ejecuto localmente 5.4 y en el servidor vivo 5.3 ... ¿O también es posible que tenga algo que ver con la configuración de la base de datos o el servidor?


Si la última consulta fue una consulta DELETE sin cláusula WHERE, todos los registros se habrán eliminado de la tabla, pero esta función devolverá cero con las versiones de MySQL anteriores a 4.1.2.

Comprueba tu versión de Mysql.

Recurso: http://php.net//manual/en/function.mysql-affected-rows.php


Prueba esto:

$mysqli = $this->mysqli; $stmt = $this->mysqli->prepare("DELETE FROM active_clients WHERE token LIKE ?"); if(!$stmt){ die(''prepare() failed: '' . $mysqli->error); }else{ $stmt->bind_param(''s'', $token); if($stmt->execute()){ $stmt->store_result(); if($stmt->affected_rows < 0){ $stmt->close(); return false; }else{ $stmt->close(); return true; } }else{ die(''execute() failed: '' . $mysqli->error); } }