php – PDO异常未被捕获
发布时间:2020-12-13 16:46:02 所属栏目:PHP教程 来源:网络整理
导读:我是新手使用PDO,我发现由于查询语句中的错误导致的异常没有被捕获并正确显示.发生这种情况时的页面输出通常如下所示: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: ... 我使用以下函数进行PDO查询: /****************
我是新手使用PDO,我发现由于查询语句中的错误导致的异常没有被捕获并正确显示.发生这种情况时的页面输出通常如下所示:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: ... 我使用以下函数进行PDO查询: /************************************************************************************************************** * Function: makeQuery * * Desc: Makes a PDO query. * * Pre conditions: The statement/query and an array of named parameters (may be empty) must be passed. * * Post conditions: The PDO query is executed. Exceptions are caught,displayed,and page execution stopped. * **************************************************************************************************************/ function makeQuery($stmt,$array,$errMsg = '') { try { $stmt->execute($array); } catch (PDOException $e) { print $errMsg != ''?$errMsg:"Error!: " . $e->getMessage() . "<br/>"; die(); } } 知道为什么没有被捕获的例外吗? 编辑:这是我创建PDO对象的方式: function createPDO() { // MySQL connection details $dbhost = ''; $dbuser = ''; $dbpass = ''; $dbname = ''; try { $db = new PDO("mysql:$dbhost=localhost;dbname=$dbname;charset=utf8",$dbuser,$dbpass,array(PDO::ATTR_EMULATE_PREPARES => false,PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } return $db; } 解决方法
您确定每个查询都在运行该函数吗?可以通过您的代码查看100%确定.
另一个选择是定义一个全局异常处理程序,然后只询问抛出的异常行和&文件来自: http://php.net/manual/en/function.set-exception-handler.php function exception_handler($exception) { echo "Uncaught exception: " . $exception->getMessage() . PHP_EOL; echo "In file: " . $exception->getFile() . PHP_EOL; echo "On line: " . $exception->getLine() . PHP_EOL; } set_exception_handler('exception_handler'); 编辑: function prepareStmt(PDO $oPdo,$sStmt,array $aDriverOptions=array()) { try { return $oPdo->prepare($sStmt,$aDriverOptions); } catch(PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |