Dado que el modo de error más recomendado para PDO es ERRMODE_EXCEPTION
, nunca funcionará la verificación directa de execute()
resultados . Como la ejecución del código ni siquiera alcanzará la condición ofrecida en otras respuestas.
Por lo tanto, hay tres escenarios posibles para manejar el resultado de la ejecución de la consulta en PDO:
- Para contar el éxito, no se necesita verificación. Siga con el flujo de su programa.
- Para manejar el error inesperado, siga igual: no se necesita un código de manejo inmediato. Se lanzará una excepción en caso de un error de la base de datos, y aparecerá en el controlador de errores de todo el sitio que eventualmente resultará en una página de error 500 común.
- Para manejar el error esperado, como una clave primaria duplicada, y si tiene un escenario determinado para manejar este error en particular, utilice un
try..catch
operador.
Para un usuario habitual de PHP, suena un poco extraño, ¿cómo es eso, no verificar el resultado directo de la operación? - pero así es exactamente como funcionan las excepciones: verifica el error en otro lugar. De una vez por todas. Extremadamente conveniente.
Entonces, en pocas palabras: en un código normal, no necesita ningún manejo de errores en absoluto. Simplemente mantenga su código como está:
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!"; // whatever
En caso de éxito, se lo dirá, en caso de error, le mostrará la página de error habitual que muestra su aplicación para tal ocasión.
Solo en caso de que tenga un escenario de manejo que no sea simplemente informar el error, coloque su declaración de inserción en un try..catch
operador, verifique si fue el error que esperaba y maneje; o, si el error fue diferente, vuelva a lanzar la excepción, para que sea posible que la maneje el controlador de errores en todo el sitio de la manera habitual. A continuación se muestra el código de ejemplo de mi artículo sobre el manejo de errores con PDO :
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
// Take some action if there is a key constraint violation, i.e. duplicate name
} else {
throw $e;
}
}
echo "Success!";
En el código anterior, estamos verificando el error en particular para tomar alguna acción y volviendo a lanzar la excepción para cualquier otro error (no hay tal tabla, por ejemplo) que se informará a un programador.
Una vez más, solo para decirle a un usuario algo como "Su inserción fue exitosa" , nunca se necesita ninguna condición.