尝试在 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 操作符报错
- 永远不要向外人透露真正的错误。只是一条普通消息
这是我在 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 操作符报错
- 永远不要向外人透露真正的错误。只是一条普通消息