Php 如何正确处理PDO连接错误?
出于安全原因,我尝试处理或捕获PHP/MySQL可能出现的错误,并想知道我是否做对了。 第一种情况:我将它用作函数,并在需要数据库连接时始终调用它。 第二种情况:我不知道如何处理。我把所有准备好的语句都放在Php 如何正确处理PDO连接错误?,php,pdo,error-handling,Php,Pdo,Error Handling,出于安全原因,我尝试处理或捕获PHP/MySQL可能出现的错误,并想知道我是否做对了。 第一种情况:我将它用作函数,并在需要数据库连接时始终调用它。 第二种情况:我不知道如何处理。我把所有准备好的语句都放在if条件下,但这很尴尬。 那么$stmt->execute呢?这也可能会失败,在if条件下处理这一问题也会让人感到困惑。 我希望有更好的办法 第一: function pdo () { try { $pdo = new PDO('mysql:host=localhost;dbnam
if
条件下,但这很尴尬。
那么$stmt->execute
呢?这也可能会失败,在if条件下处理这一问题也会让人感到困惑。
我希望有更好的办法
第一:
function pdo () {
try {
$pdo = new PDO('mysql:host=localhost;dbname=dbname', 'user', 'pw');
}
catch(PDOException $e) {
header("Location: handle_error.php");
exit;
}
return ($pdo);
}
第二:
if ($stmt = $pdo->prepare("SELECT a FROM b WHERE c = :c")) {
$stmt->execute(array(':c' => $c));
$result = $stmt->fetch();
echo 'All fine.';
}
else {
echo 'Now we have a problem.';
}
您当前的代码有一些缺陷。让我给你一些建议
- 正确的字符集很重要。如果没有它,您的数据可能会损坏,甚至使您容易受到SQL注入的攻击。推荐的字符集是
utf8mb4
- 启用错误报告可以省去手动检查每个函数调用是否失败的麻烦。您只需要告诉PHP在发生错误时触发异常,并找到一种合适的方法将错误记录到服务器上(阅读更多:)
- 默认情况下,会启用模拟准备,但事实是,如果没有它们,您会过得更好。如果您的数据库支持本机准备的语句,并且大多数都支持,那么请改用它们李>
$options = [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new \PDO('mysql:host=localhost;dbname=dbname;charset=utf8mb4', 'user', 'pw', $options);
die
、exit
、echo
、var\u dump
)。如果此类代码进入生产环境,这将是一个巨大的安全问题如果PDO连接设置为在出现错误时抛出异常,则无需使用
If
语句来检查prepare()
或execute()
的返回代码!我已经有了一个第一类的答案,但您的提问方式表明,这与堆栈溢出的主题无关,您的问题更适合于。请在那里询问,或者将其改为“如何…”,如“如何正确连接PDO并处理错误”“感谢您详细解释pdo连接。现在我不再使用connenction函数,而是在每个php文件的顶部包含一个单独的database\u setting.php文件,其中包含正确的信息,这是需要的。我希望到目前为止这是正确的?