尝试在 PHP5 PDO 中捕获

try catch in PHP5 PDO

这是我在 PHP 上的第三天。我有以下用于选择数据的代码-

$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try
{
   $sql = "SELECT LoginName FROM users WHERE LoginName = :LoginName";
   $statement = $db->prepare($sql); //intentionally used $db here 
   $statement->bindParam(':LoginName', $LoginName, PDO::PARAM_STR, 50);
   $statement->execute();
   $count= $statement->rowCount();
}
catch(PDOException $e)
{
   header('Content-Type: application/json');
   echo json_encode(array('result'=>'Error','data'=> $e->getMessage()));    
}

我故意用 $db 而不是 $conn。所以应该有一个例外。但是在我的 ajax 调用中,$e->getMessage() 尚未从 catch 块发送。

有什么帮助吗?

这是必须如何完成的

首先,将此处理程序设置为处理脚本中可能发生的所有错误,无论是 PDO 还是其他任何错误。

set_error_handler("myErrorHandler");
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    error_log("$errstr in $errfile:$errline");
    header('HTTP/1.1 500 Internal Server Error', TRUE, 500);
    header('Content-Type: application/json');
    echo json_encode(array('result'=>'Error', 'data'=>'Server error'));   
    exit;
}

然后用这种方式制作你的 PDO 代码

$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "SELECT 1 FROM users WHERE LoginName = ?";
$statement = $db->prepare($sql); //intentionally used $db here 
$statement->execute([$LoginName]);
$found = $statement->fetchColumn();

本质上,您应该遵循以下规则:

  • 从不使用 try catch 操作符报错
  • 永远不要向外人透露真正的错误。只是一条普通消息