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);
}
}