如果查询或其他任何内容出错,我的网页会停止加载。
示例apache日志:
[Sat Aug 19 20:54:47.756528 2017] [php7:error] [pid 5180:tid 1832] [client ::1:52169] PHP Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '43334478' for key 'PRIMARY' in C:\\Users\\Olivier\\Downloads\\UniServerZ\\www\\admin\\user_admin.php:113\nStack trace:\n#0 C:\\Users\\Olivier\\Downloads\\UniServerZ\\www\\admin\\user_admin.php(113): PDOStatement->execute()\n#1 {main}\n thrown in C:\\Users\\Olivier\\Downloads\\UniServerZ\\www\\admin\\user_admin.php on line 113, referer: http://localhost/admin/user_admin.php?adduser
我的代码对于每个查询都非常简单,但在上面的例子中我有类似的东西:
$stmt = $conn->prepare($sql);
$stmt->execute();
if ($stmt) {
echo '<p><font color="green">User successfully created</font></p>';
} else {
echo '<p><font color="red">Error while creating user</font></p>';
echo '<p><font color="red">Error is : '.$stmt->errorCode().'</font></p>';
}
并且自然地最后一行不起作用,如果在插入期间出现错误(在任何类型中,在示例中它只是因为指定的ID已经存在于数据库中),页面只是在错误发生时停止加载,我不想要那个。
有没有办法解决这个问题?并使页面继续加载,即使有查询错误?并使PDO显示错误?
有关信息,我正在连接到DB:
function _ConnectDB($db_host, $db_name, $db_user, $db_pass) {
try {
$conn = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $conn;
}
catch(PDOException $e)
{
echo "Connection to the database failed: " . $e->getMessage();
}
}
这是来自我在连接期间指定的ERRMODE_EXCEPTION吗?或一些PHP.ini参数?
谢谢! 问候
答案 0 :(得分:0)
它被称为异常(http://php.net/manual/en/language.exceptions.php),您应该捕获它以显示错误。未捕获的异常会破坏代码执行,因为这就是他们所做的。例外意味着发生了一些不好的事情,程序无法继续直到你抓住它(https://www.w3schools.com/php/php_exception.asp)并告诉你的程序这样做是什么情况。