TPS estrella
$st = $db->prepare("SELECT * FROM c6ode");
¿Cómo puedo verificar el error mysql intencional para la consulta en el caso anterior?
VolkerK
Debe establecer el atributo de modo de error PDO::ATTR_ERRMODE
a PDO::ERRMODE_EXCEPTION
.
Y dado que espera que la excepción sea lanzada por el prepare()
método, debe deshabilitar el PDO::ATTR_EMULATE_PREPARES
característica. De lo contrario, el servidor MySQL no “verá” la declaración hasta que se ejecute.
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->prepare('INSERT INTO DoesNotExist (x) VALUES (?)');
imprime (o registra, depende de la configuración de PHP)
SQLSTATE[42S02]: Base table or view not found:
1146 Table 'test.doesnotexist' doesn't exist
-
¿Por qué usar Try/Catch cuando PDO atrapa el error de todos modos?
– Chiwda
26 de junio de 2022 a las 17:46
ladar
Estoy usando esto sin ninguna configuración adicional:
if (!$st->execute()) {
print_r($st->errorInfo());
}
-
Sigue siendo la mejor respuesta 8 años después.
– Petro
4 de diciembre de 2020 a las 14:18
-
Perfecto para 2021
– Arun Maurya
1 de junio de 2021 a las 7:48
-
@Petro en ninguna parte es el “mejor” tan pronto como terminas tu sandbox de aprendizaje y te das cuenta de que en el producción el código debe ser nada como eso.
– Tu sentido común
hace 2 días
Supongo que su queja es que la excepción no se dispara. Lo más probable es que PDO esté configurado para no generar excepciones. Habilítelos con esto:
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-
No, todavía no funciona, sé que mi consulta es incorrecta, pero quiero mostrar ese error.
– TPS estrella
8 de enero de 2012 a las 8:48
-
Es posible que encuentre que hay un error con la llamada a
new PDO(...
sí mismo. Intente aumentar el nivel de error_reporting estableciendo, por ejemplo,error_reporting(E_ALL)
.–Steve Rukuts
8 de enero de 2012 a las 8:49
una forma rápida de ver sus errores mientras prueba:
$error= $st->errorInfo();
echo $error[2];
/* Provocar un error — la tabla BONES no existe */
$sth = $dbh->prepare('SELECT skull FROM bones');
$sth->execute();
echo "\nPDOStatement::errorInfo():\n";
$arr = $sth->errorInfo();
print_r($arr);
producción
Array
(
[0] => 42S02
[1] => -204
[2] => [IBM][CLI Driver][DB2/LINUX] SQL0204N "DANIELS.BONES" is an undefined name. SQLSTATE=42704
)
-
Error no detectado: llamada a función indefinida errorInfo ()
– Kwnstantinos Nikoloutsos
14 dic 2019 a las 15:00
-
Error no detectado: llamada a función indefinida errorInfo ()
– Kwnstantinos Nikoloutsos
14 dic 2019 a las 15:00