1 回答
TA贡献1862条经验 获得超7个赞
您当前的代码有一些缺陷。让我给你一些提示。
您不需要您创建的函数,至少在当前形式中不需要。每次调用此函数时,它都会创建一个新的 PDO 对象,这会影响脚本的性能。理想情况下,您希望在整个脚本的整个执行过程中只有一个连接。
创建新的 PDO 连接时,您需要记住 3 件事:设置正确的连接字符集、启用错误报告和禁用模拟准备。
完整的代码应该是这样的:
正确的字符集很重要。没有它,您的数据可能会损坏,甚至容易受到 SQL 注入的影响。推荐的字符集是
utf8mb4
.启用错误报告可以省去手动检查每个函数调用是否失败的麻烦。您只需要告诉 PHP 在发生错误时触发异常并找到一种合适的方式在您的服务器上记录错误(阅读更多:我的 PDO 语句不起作用)
默认情况下启用模拟准备,但事实是没有它们你会更好。如果您的数据库支持本机准备好的语句,并且大多数都支持,那么请改用它们。
$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);
不要捕捉异常,除非您知道如何处理它们并且非常确定您需要这样做。最好保留例外;让 PHP 与其他异常/错误/警告一起处理它们。毕竟为什么只为 PHP 异常设置异常?所有 PHP 错误都应该以相同的方式处理。无论您做什么,都永远不会在屏幕上手动打印(包括die, exit, echo, var_dump)错误消息。如果此类代码进入生产环境,这将是一个巨大的安全问题。
如果您的 PDO 连接设置为在出现错误时抛出异常,则您永远不需要使用if语句来检查prepare()或 的返回码execute()。
- 1 回答
- 0 关注
- 208 浏览
添加回答
举报