2015-08-20 24 views
0

每當我的網站收到太多的連接時,就會顯示我的數據庫信息。PHP PDO - 當連接太多時顯示密碼

我已經明確告訴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顯示我的敏感數據庫信息給大家當連接太多時?

+4

究竟顯示了什麼? –

+0

@Dagon「SQLSTATE [HY000] [1040]連接太多」,然後是我的數據庫信息。 – oliverbj

+0

那麼,我仍然在學習PDO,並非常喜歡解決我的問題的另一種方法。 – oliverbj

回答

3

問題是您正在嘗試連接到數據庫之前您設置了無聲屬性。因此,在連接嘗試期間,PDO仍然可以隨心所欲地大聲尖叫。您需要指定沉默作爲連接嘗試本身的一部分:

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

給我這個錯誤:警告:PDO :: __ construct():SQLSTATE [HY000]:一般錯誤:PDO :: ATTR_STATEMENT_CLASS需要格式數組(classname,array(ctor_args));類名必須是指定現有類的字符串 – oliverbj

+0

這將是'PDO :: ATTR_ERRMODE => PDO :: ERRMODE_SILENT'而不是'PDO :: ATTR_ERRMODE,PDO :: ERRMODE_SILENT'。 – Pietu1998

+0

是的,不好的剪切和粘貼,更改','爲'=>'爲errmode。 –