PHP PDO错误消息作为要在电子邮件中发送的变量

PHP PDO错误消息作为要在电子邮件中发送的变量,php,mysql,error-handling,pdo,error-reporting,Php,Mysql,Error Handling,Pdo,Error Reporting,在PHP中从MySQL切换到PDO。过去,当一个查询运行时,无论出于什么原因都没有执行,我可以给自己发送一封邮件,邮件正文中包含mysql_error()消息,如下所示: $query = "SELECT dogs FROM animals"; $res = mysql_query($query); if (!$res) { $error = "Error Message: " . mysql_error(); mail("my@email.com","Database Err

在PHP中从MySQL切换到PDO。过去,当一个查询运行时,无论出于什么原因都没有执行,我可以给自己发送一封邮件,邮件正文中包含mysql_error()消息,如下所示:

$query = "SELECT dogs FROM animals";
$res = mysql_query($query);

if (!$res) {
    $error = "Error Message: " . mysql_error();
    mail("my@email.com","Database Error",$error);
}
从那以后,当网站上的数据库出现问题时,我会被一个EML提醒

我的PDO设置如下所示:

setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
我在PDO连接本身中有一个try-catch,但我希望获得准备和执行的错误消息,因为它们是这样发生的:

$query = "SELECT cats FROM animals";
$sql = $pdo->prepare($query);

if (!$sql->execute()) {
  $error = "Error Message: " . (pdo error message here);
  mail("my@email.com","Database Error",$error);
}
关于如何在电子邮件主题中分配PDO错误消息,有什么想法吗?如果使用errorInfo()进行准备失败,我可以获得逻辑错误消息,但在执行错误时(例如数组的无效参数计数),我似乎无法获得错误消息

谢谢您的帮助。

使用try/catch

try {
    $sql->execute();
} catch (PDOException $e) {
    $e->getMessage(); // This function returns the error message
}
您可以使用:

$query = "SELECT cats FROM animals";
$sql = $pdo->prepare($query);

if (!$sql->execute()) {
  $arr = $sql->errorInfo();
  $error = print_r($arr, true);

  mail("my@email.com","Database Error",$error);
}

谢谢你的重播。我确实试过了,但我得到的结果是:数组([0]=>HY093[1]=>[2]=>)没有真正解释问题所在。您肯定有一个绑定不正确的变量。您确定
$query=“从动物中选择猫”是您试图执行的SQL吗?如果您实际上是使用:variable绑定某个变量,则需要注意bindParam和bindValue,它们有点不同。首先,只需使用bindValue,它将接受您向它抛出的任何东西。我非常了解绑定。我写了一个简单的查询来获取消息accross。我想得到一个错误,如果专栏猫不存在于动物。感谢回复zjd。是的,我也这样尝试过:尝试{$sql->execute($pdo_data);}catch(pdo异常$e){$error=$e->getMessage();mail(“me@mail.com“,”数据库错误“,$Error);}但是我得到了这个PHP错误:CFatal错误:对非对象调用成员函数execute(),整个脚本停止。它不会在catch块中输出任何内容。您得到的错误是因为
$sql
没有与其关联的函数
execute()
。您确定您仍然有
$sql=$pdo->prepare($query)在脚本中?如果是,您在哪里初始化
$pdo
。另外,您可以将代码包装成“`”符号,这样它在这些注释中会显示得更好。现在它工作了,因为我在setAttribute()中将ERRMODE\u警告更改为ERRMODE\u异常。改变了这一点后,它成功了。再次感谢你的帮助。