繁体   English   中英

php页面在PDO /查询错误时停止加载

[英]php page stops loading on PDO/query error

如果查询或其他任何错误,我的页面将停止加载。

示例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显示错误?

为了获得信息,我正在像这样连接到数据库:

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参数?

谢谢! 问候

这被称为异常( http://php.net/manual/en/language.exceptions.php ),您应该捕获它以显示错误。 未捕获的异常将中断代码执行,因为这是它们的工作。 异常意味着发生了严重的错误,程序无法继续运行,直到您抓住它( https://www.w3schools.com/php/php_exception.asp ),并在这种情况下告诉程序该怎么做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM