我是新手使用PDO,我发现由于查询语句中的错误导致的异常没有被捕获并正确显示.发生这种情况时的页面输出通常如下所示:
Fatal error: Uncaught exception 'PDOException' with message 'sqlSTATE[42000]: ...
/**************************************************************************************************************
* 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');
编辑:
经过OP的一些对话后,我现在确定PDOStatement :: prepare的调用是抛出异常的地方,因此我建议另一个包装函数到库中:
function prepareStmt(PDO $oPdo, $sstmt, array $aDriverOptions=array())
{
try
{
return $oPdo->prepare($sstmt, $aDriverOptions);
}
catch(PDOException $e)
{
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。