2011-09-01 33 views
2

環境 - 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 

兩種解決方案工作!

+0

是mysql_erro拼寫錯誤? –

+1

這不是MySQL錯誤,它是一個PHP警告。它會服從你在php.ini中的日誌設置。 – Paulpro

+0

我在我的文章中修復了它。我的代碼有正確的拼寫...對不起! :O) – jdias

回答

2

使用$php_errormsg之前,請確保您打開track_errors

// Preferably do this in your php.ini file, instead of in code. 
ini_set('track_errors', 1); 

$db = mysql_connect('host', 'database', 'password'); 
if (!$db) 
{ 
    log($php_errormsg); 
} 
+0

這也適用。對於我在下午的大部分時間裏一直試圖解決的問題,你們給了我兩個解決方案......謝謝。我將更新這篇文章以獲取這兩種解決方案。 – jdias