【问题标题】:PHP PDO - Showing password when too many connectionsPHP PDO - 连接过多时显示密码
【发布时间】:2015-08-20 19:48:54
【问题描述】:

每当我的网站收到太多连接时,它就会显示我的数据库信息。

我已经明确告诉 PDO 不要使用 PDO::ERRMODE_SILENT 显示任何错误消息:

$dsn = "mysql:host=" . $database['host'] . ";dbname=" . $database['db'];
$dbh = new PDO($dsn, $database['user'], $database['pass'], array(PDO::ATTR_PERSISTENT => false));       
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); // <== add this line
//echo 'Connected to Database<br/>'; 

此外,我还禁用了 PHP 错误:

error_reporting(0);
ini_set('display_errors', '0'); 

当连接太多时,为什么我的 PDO 会向所有人显示我的敏感数据库信息?

【问题讨论】:

  • 究竟显示了什么?
  • @Dagon "SQLSTATE[HY000] [1040] Too many connections" 然后是我的数据库信息。
  • 嗯,我还在学习 PDO,并且非常希望用另一种方法来解决我的问题。
  • 首先,永远不要将错误模式设置为静默。您总是希望记录错误。但它们不应该显示,因此您可以将其关闭(不过,我会使用 php.ini 或 .htaccess 全局执行此操作。除此之外,您还应该考虑对查询使用异常处理。

标签: php mysql pdo


【解决方案1】:

问题是您尝试连接到数据库之前您设置了静默属性。因此,在连接尝试期间,PDO 仍然可以随意大声尖叫。您需要将静默指定为连接尝试本身的一部分:

$dbh = new PDO($[..snip..], array(PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT));
                                                                 ^^^^^^^^^^^

【讨论】:

  • 给我这个错误:警告:PDO::__construct(): SQLSTATE[HY000]: 一般错误:PDO::ATTR_STATEMENT_CLASS 需要格式数组(类名,数组(ctor_args));类名必须是指定现有类的字符串
  • 那将是 PDO::ATTR_ERRMODE =&gt; PDO::ERRMODE_SILENT 而不是 PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT
  • 是的,糟糕的剪切和粘贴。将 errmode 的 , 更改为 =&gt;。答案固定。
猜你喜欢
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多