4

在 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);
}

从那以后,当网站上的数据库出现问题时,我会收到一个 emil 警报。

我的 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() 失败但在执行错误(例如数组的无效参数计数)时,我可以获得逻辑错误消息,我似乎无法收到错误消息。

感谢您的任何帮助。

4

2 回答 2

6

使用 try/catch

try {
    $sql->execute();
} catch (PDOException $e) {
    $e->getMessage(); // This function returns the error message
}
于 2013-03-21T20:05:36.900 回答
0

您可以使用:

$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);
}
于 2013-03-21T20:10:57.357 回答