错误,使用PDO与mysql连接太多显示我们的db用户名和密码?

时间:2011-10-28 03:48:53

标签: mysql pdo

在之前的某个时刻,似乎有太多的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连接到db的新形式,我进入它是因为人们告诉我我的常规mysql_connect表单是不安全的。但是,默认情况下,当mysql_connect连接过多时,从不将用户名和密码打印到屏幕上。

真是个灾难。

如果错误消失,我如何阻止PDO执行此操作?

我正在使用:

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

2 个答案:

答案 0 :(得分:3)

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

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

通常调用堆栈是一件非常好的事情,所以你希望错误处理程序能够工作;你只需要正确使用它。

  • try / catch块放在可能引发异常的代码周围的相关位置;至少,在代码的顶层放置一个全能try / catch块,以便不会渗透。
但是,PDO文档明确指出(在红色警告框中)您未能正确捕获PDO异常的巨大风险:

  

如果您的应用程序没有捕获从PDO构造函数抛出的异常,则zend引擎采取的默认操作是终止脚本并显示后向跟踪。此回溯可能会显示完整的数据库连接详细信息,包括用户名和密码。您有责任通过显式(通过catch语句)或通过set_exception_handler()隐式捕获此异常。

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

答案 1 :(得分:2)

编辑你的php.ini并设置

display_errors = 0

如果您无权访问php.ini,则需要在脚本的顶部添加:

ini_set("display_errors", "0");

请参阅http://php.net/manual/en/errorfunc.configuration.phphttp://php.net/manual/en/function.error-reporting.php

这将阻止所有错误输出到浏览器。确保您仍然记录错误(通过php.ini设置)。

P.S。不要抛弃PDO

相关问题