gpt4 book ai didi

php - 引用 — 有关 PDO 的常见问题

转载 作者:行者123 更新时间:2023-11-29 18:26:10 25 4
gpt4 key购买 nike

这是什么?

这是有关 PHP 数据对象的常见问题列表

这是为什么?

由于 PDO 具有一些普通 PHP 用户不知道的功能,因此有关 PDO 中准备好的语句和错误处理的问题非常常见。所以,这只是一个可以找到所有这些的地方。

我应该在这里做什么?

如果您的问题已通过此列表进行投票,请在下面找到您的问题并将修复应用于您的代码。简要查看其他问题也是一个好主意,以便为其他常见陷阱做好准备。

列表

另请参阅

最佳答案

PDO 查询失败,但我看不到任何错误。如何从 PDO 获取错误消息?

为了能够看到数据库错误,必须设置 PDO errmode到异常(exception)情况。异常在很多方面都比常规错误更好:它们始终包含堆栈跟踪,可以使用 try..catch 捕获它们或使用专用错误处理程序进行处理。即使未经处理,它们也会像常规 PHP 错误一样,按照站点范围的错误报告设置提供所有重要信息。

请注意,将此模式设置为连接选项将使 PDO 也可以在连接错误时抛出异常,这一点非常重要。
因此,以下是正确创建 PDO 连接的示例:

$dsn = "mysql:host=$host;dbname=$db;charset=utf8";
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
// other options
);
$pdo = new PDO($dsn, $user, $pass, $opt);

通过这种方式连接,您将始终收到查询执行期间发生的所有数据库错误的通知。请注意,您必须能够看到一般的 PHP 错误。在实时站点上,您必须查看错误日志,因此,设置必须是

error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);

在本地开发服务器上,屏幕上出现错误是可以的:

error_reporting(E_ALL);
ini_set('display_errors',1);

当然,您永远不应该在 PDO 语句前面使用错误抑制运算符 (@)。

此外,由于许多不好的例子告诉您将每个 PDO 语句包装到 try..catch block 中,我必须做出明确的说明:

DO NOT use try..catch operator just to echo an error message. Uncaught exception is already excellent for this purpose, as it will act just the same way as other PHP errors - so, you can define the behavior using site-wide settings - so, you will have your error message without this useless code. While unconditionally echoed error message may reveal some sensitive information to a potential attacker, yet confuse a honest visitor.

  • A custom exception handler could be added later, but not required. Especially for new users, it is recommended to use unhandled exceptions, as they are extremely informative, helpful and secure.
  • Use try..catch only if you are going to handle the error itself - say, to rollback a transaction.

关于php - 引用 — 有关 PDO 的常见问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46178742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com