gpt4 book ai didi

mysql - 错误,使用 PDO 与 mysql 的连接过多显示了我们的数据库用户名和密码?

转载 作者:可可西里 更新时间:2023-11-01 08:00:02 26 4
gpt4 key购买 nike

在早些时候的某个时候,似乎有太多的 sql 连接,并且以下内容被回显以筛选正在寻找的人:

PHP Fatal error:  Uncaught exception 'PDOException' with message  'SQLSTATE[08004] [1040] Too many connections' in /dir/file.php:21
Stack trace:
#0 /dir/file.php(21): PDO->__construct('mysql:host=loca...', 'the user', 'password')

如您所见,它打印了用户名和密码。

我是连接到数据库的 PDO 形式的新手,我开始使用它是因为人们告诉我我的常规 mysql_connect 形式不安全。但是默认情况下,当 mysql_connect 有太多连接时,它从不将用户名和密码打印到屏幕上。

真是一场灾难。

如果出现错误,我该如何阻止 PDO 执行此操作?

我正在使用:

$dbh = new PDO('mysql:host=localhost;dbname=' . $db, $user, $pass);

最佳答案

PDO 没有做任何类似的事情。

发生这种情况是因为您没有执行任何异常处理,因此正在调用默认的 PHP 错误处理程序并显示您的调用堆栈,包括函数参数。

通常调用堆栈是个好东西,所以您希望错误处理程序工作;你只需要正确使用它。

  • try/catch block 放在可能引发异常的代码周围的相关位置;至少,在代码的顶层放置一个包罗万象的 try/catch block ,这样就没有任何东西可以渗透。

不过,PDO 文档清楚地说明了(在红色警告框中)您冒着没有正确捕获 PDO 异常的巨大风险:

If your application does not catch the exception thrown from the PDO constructor, the default action taken by the zend engine is to terminate the script and display a back trace. This back trace will likely reveal the full database connection details, including the username and password. It is your responsibility to catch this exception, either explicitly (via a catch statement) or implicitly via set_exception_handler().

( http://www.php.net/manual/en/pdo.connections.php )

关于mysql - 错误,使用 PDO 与 mysql 的连接过多显示了我们的数据库用户名和密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7924935/

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