2012-08-05 20 views
14

Parece que para una instrucción INSERT, uno puede usar if (isset($connect->lastInsertId())) para verificar si la instrucción INSERT fue exitosa. (Por favor corrígeme si estoy equivocado.)Con PDO, ¿cómo puedo asegurarme de que una instrucción UPDATE fue exitosa?

Pero para una declaración ACTUALIZADA, ¿cómo puedo saber si fue exitosa?

Por ejemplo, tengo una básica así:

$statement=$connect->prepare("UPDATE users SET premium='1' WHERE userid=?"); 
$statement->execute(array($id)); 

Muchas gracias por adelantado. Saludos

+2

¿Qué es una declaración de actualización exitosa en sus ojos? – hakre

+1

¿Ayuda $ stmt-> rowCount()? – Nate

+0

Hola, es una afirmación que resultó en la modificación de al menos un valor en la tabla. Regards – alexx0186

Respuesta

14

Depende de lo que quiere decir con "éxito". Si quiere decir que la consulta se ejecutó sin fallar, entonces PDO lanzará una excepción en caso de error o devolverá FALSE desde PDOStatement::execute(), dependiendo de qué modo de error haya configurado, por lo que una consulta "exitosa" en ese caso sería una en la que El método de ejecución no devolvió FALSE o arrojó una excepción.

Si quiere decir "exitoso" en cuanto a que en realidad hay filas actualizadas (en comparación con solo 0 filas actualizadas), entonces deberá verificarlo usando PDOStatement::rowCount(), que le indicará el número de filas afectadas de la consulta anterior.

Advertencia: Para actualizaciones donde newvalue = oldvaluePDOStatement::rowCount() devuelve cero. Puede utilizar

$p = new PDO($dsn, $u, $p, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));

con el fin de desactivar este comportamiento inesperado.

+0

Hola, muchas gracias por esto. De hecho, quise decir "más de cero fila actualizada". Saludos – alexx0186

+0

Muy buena respuesta - Realmente necesitaba la primera parte - verdadero/falso :) –

+3

Preste atención confiando en el resultado rowCount: PDOStatement-> rowCount - Devuelve el número de filas afectadas por la última instrucción SQL Si intenta actualizar una fila pero el (los) valor (es) de los nuevos campos son los mismos que los que ya están almacenados en la base de datos, rowCount devolverá 0 (¡ya que nada se ha actualizado realmente!). Esto no significa que su instrucción UPDATE no se haya ejecutado correctamente. –

-1
$stmt->execute(); 
$count = $stmt->rowCount(); 

if($count =='0'){ 
    echo "Failed !"; 
} 
else{ 
    echo "Success !"; 
} 
+1

Será mejor que explique acerca de su respuesta, las respuestas con solo el código no son muy útiles. – Arman

+0

mi respuesta es sobre ACTUALIZACIÓN. $ sql = "ACTUALIZAR usuarios SET premium = '1' WHERE ID de usuario = $ id"; $ stmt = $ dbConnection-> prepare ($ sql); $ stmt-> execute(); , entonces el código anterior tendrá éxito o fallará. –

Cuestiones relacionadas