Tengo un script PHP con dos errores tipográficos deliberados en la declaración de una consulta SQL:¿Por qué no se detecta el error de excepción de PDO?
try
{
$stmt = $dbh->prepare("SELECT COUNT(*) FROM Product WHERE non-existent_column=?");
$stmt->blindValue(1, $id, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetchColumn();
}
catch(PDOException $err)
{
var_dump($err->getMessage());
var_dump($dbh->errorInfo());
}
Sin embargo, el script no detectar el error, incluso después de ajustar atributo a PDO::ERRMODE_EXCEPTION
. ¿Que me estoy perdiendo aqui?
ACTUALIZACIÓN:
Este es el guión completo. El segundo error tipográfico blindValue
ha sido revertido. El error permanece no detectada:
<?php
$user= "user";
$password = "password";
$dsn = "mysql:dbname=Catalogue;host=localhost";
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ERRMODE_EXCEPTION);
$id = 1000;
try
{
$stmt = $dbh->prepare("SELECT COUNT(*) FROM Product WHERE non-existent_column=?");
$stmt->bindValue(1, $id, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetchColumn();
}
catch(PDOException $err)
{
echo "caught";
var_dump($err->getMessage());
var_dump($dbh->errorInfo());
exit();
}
var_dump($stmt);
var_dump($row);
echo "uncaught";
exit();
?>
Si la excepción termina con el controlador de error predeterminado, ¿puede mostrar el mensaje? También tienes un error tipográfico en '-> blindValue'. Eso llevaría a un error fatal, no una excepción. – mario
@mario, ¿quiere decir el valor predeterminado como en '$ err' agregado anteriormente? Agregué ese también, no hay mensaje de error. La secuencia de comandos omite todo el bloque catch. –
@mario, sí, ese es el segundo error tipográfico. El primero es la columna inexistente. –