【问题标题】:try catch in PHP5 PDO尝试在 PHP5 PDO 中捕获
【发布时间】:2016-09-15 14:41:56
【问题描述】:

这是我在 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 块发送。

有什么帮助吗?

【问题讨论】:

  • 不,这不是个例。这是calling method on null.Core php 的 PHP 警告,不会引发异常。 PHP 支持 OOP,但本身并不是 OOP,因此 PHP 语言级别的错误永远不会引发异常。

标签: pdo try-catch php-5.5


【解决方案1】:

这里是怎么做的

首先,设置此处理程序以处理脚本中可能出现的所有错误,无论是 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.ini?
  • 没有。您不能在 php.ini 中编写 PHP 代码。在应用程序的配置文件中。
  • 如果你没有,就写在你当前代码的顶部。
猜你喜欢
  • 1970-01-01
  • 2019-06-29
  • 2016-05-11
  • 2013-11-18
  • 2018-05-16
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 2017-05-22
相关资源
最近更新 更多