環境 - PHP5.2.17,MySQL5.0.92警告()不填充mysql_error()
我實現我的應用程序錯誤日誌框架,我試圖登錄錯誤和警告到數據庫。
$db = mysql_connect('host', 'database', 'password');
if (!$db)
{
log(mysql_error());
}
...continue code
我想測試日誌並將錯誤的主機傳遞給mysql_connect函數。正如所料,我得到了屏幕上的警告
Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'host' (1) in /path/to/my/php/file.php on line 4
而我的日誌功能被調用,但mysql_error()爲空。根據php手冊(http://php.net/manual/en/function.mysql-connect.php),mysql_error()應該返回最後一個mysql錯誤。在手冊中,他們甚至有一個如何使用mysql_error()將錯誤回顯到屏幕的例子。
我試過使用mysql_error($ db),但它返回一個錯誤,指出$ db沒有定義。
我試圖用echo mysql_error()替換我的函數;我什麼也沒有顯示。
我試過使用mysql_errno();我也是空的。
我知道該腳本正在捕捉警告,因爲它將它輸出到屏幕上。
解決我的問題的一種方法是將警告存儲在變量中。
我很感激任何人都可以提供的幫助。謝謝。
更新 - 2個解決方案:
解決方案1:(謝謝馬里奧在他的評論是這個職位一位代表建議本)
使用PHP函數error_get_last() - 引用(HTTP:// php.net/manual/en/function.error-get-last.php)。
這種解決方案新的工作代碼:
$db = mysql_connect('host', 'database', 'password');
if (!$db)
{
$error = error_get_last();
log($error['type'] . ": " . $error['message'] . " in file " . $error['file'] . " on line " . $error['line']);
}
...continue code
解決方案2:(謝謝PauPRO在下面回答1暗示此)
使用$ php_errormsg中之前,我們需要的track_errors設置爲1在php.ini文件中。只是包括以下行在php.ini文件
track_errors = 1
或者你可以設置的track_errors 1在腳本中看到下面的代碼,用此替代:
ini_set('track_errors', 1);
$db = mysql_connect('host', 'database', 'password');
if (!$db)
{
log(mysql_error());
}
...continue code
兩種解決方案工作!
是mysql_erro拼寫錯誤? –
這不是MySQL錯誤,它是一個PHP警告。它會服從你在php.ini中的日誌設置。 – Paulpro
我在我的文章中修復了它。我的代碼有正確的拼寫...對不起! :O) – jdias