Bien, entonces he estado usando un PDO wrapper para un proyecto en el que estoy trabajando, y estoy tratando de averiguar si una consulta DELETE fue exitosa o no. Aquí está el código que estoy utilizando:¿Cómo puedo recuperar el número de filas eliminadas con PDO?
/**
* A pretty straight-forward query to delete a row from the verification
* table where user_id is $user_id and code is $code
*/
$result = $this->database->query("DELETE FROM verification " .
"WHERE user_id = %u AND code = %s",
$user_id,
$code);
/**
* This function will grab the PDO's exec() return, which should
* return the number of rows modified.
*/
if($this->database->getNumAffected($result) > 0)
return true;
else
return false;
El problema es, si la consulta DELETE en realidad elimina una fila o no, $ this-> base de datos-> getNumAffected ($ resultado) siempre devuelve '0'.
Puede ver el contenedor, pero básicamente $ this-> database-> getNumAffected ($ result) simplemente devuelve exactamente el mismo valor que PDO :: exec() devolvería.
I probado este código sin la envoltura (directamente en DOP), y que tenía el mismo problema, pero a la inversa: que siempre se devuelve '1' (. Si una fila se ha eliminado o no)
Cualquier ayuda sería apreciado enormemente.
EDIT: Basado en this SO pregunta, estoy haciendo todo bien ... No entiendo por qué esto no está funcionando.
No estoy seguro de lo que quiere decir con que no utiliza exec(), presiona Ctrl + F y escribe execute (. Gracias por la respuesta. –
Quiero decir que no usa PDO :: exec(), pero usa PDOStatement :: execute(), que es algo totalmente diferente. Probablemente sería útil ir a php.net/pdo y conocer la diferencia entre el objeto PDO (y su método 'exec()') y el PDOStatement object (y su método 'execute()'). Hay algunas diferencias realmente críticas allí. – TML
Ah, está bien, eso tiene sentido. Muchas gracias por la respuesta, y lo investigaré. No lo sé tanto sobre PDO, como cuando comencé a aprenderlo (lo cual fue provocado por la persona que hizo este envoltorio), me dieron inmediatamente un envoltorio para usar en su lugar. La única ventaja del envoltorio que veo es que tienes que escribir variables, por lo que si es del tipo incorrecto (por ejemplo, una cadena cuando debería ser un entero), devuelve un error. Oh, quise decir esto en mi primer comentario: entiendo que numRows() es muy diferente de rowCount(), y debido a la forma en que funciona numRows(), no lo uso. –