2011-05-25 70 views
8

有時候,我得到一個數據庫錯誤像有沒有辦法在PHP中捕捉MySQL和數據庫錯誤?

警告:mysql_connect()函數[function.mysql-連接]:拒絕訪問用戶test'@'101.190.193.83'(使用密碼:YES)

無法連接:拒絕訪問用戶test'@'101.190.193.83'(使用密碼:YES)」

但真正存在的密碼沒有改變

有什麼辦法。捕捉這個錯誤一個日誌文件並在屏幕上顯示一些不錯的消息,如「服務器錯誤。請一段時間重試。」

+0

實際上,我工作的一個開源項目發現錯誤,顯示上一個不錯的消息,屏幕並使用比標準錯誤日誌提供的更多信息記錄它們。 http://jarofgreen.co.uk/2011/01/tracking-errors-with-php/或http://elastik.sf.net/ – James 2011-06-04 07:31:54

回答

3
<?php 
    $connect = mysql_connect(HOST, USER, PASS); 
    if(!$connect) { echo 'Server error. Please try again sometime. CON'; } 

    $select_db = mysql_select_db(DATABASE); 
    if(!$select_db) { echo 'Server error. Please try again sometime. DB'; } 
?> 
+0

格式化丟失,外觀上stackoverflow無法識別它.. http: //pastebin.com/EFefnNSp – ChrisH 2011-05-25 06:52:24

+3

我爲你修好了。要獲得代碼格式,請在代碼前放置4個空格(或1個選項卡)。您可以通過選擇文本並按下CTRL + K輕鬆完成此操作。 – drudge 2011-05-25 06:54:04

+0

@Jnpcl謝謝!學到了新東西:) – ChrisH 2011-05-25 07:07:22

10

如果你不想PHP顯示警告,您必須使用‘@’運算符

$connect = @mysql_connect(HOST, USER, PASS);//won't display the warning if any. 
if (!$connect) { echo 'Server error. Please try again sometime. CON'; } 

您也可以考慮設置display_errors到在php.ini文件中製作0

您也可以考慮爲PDO連接到MySQL,它的使用異常作爲默認報告錯誤,

try { 
    $dbh = new PDO($dsn, $user, $password); 
} catch (PDOException $e) { 
    echo 'Could not connect : ' . $e->getMessage(); 
} 
+2

強烈建議+1使用PDO。 – 2011-06-04 08:00:57

3

有什麼辦法可以捕獲這些錯誤到日誌文件中嗎?

是的。所有的PHP錯誤和警告都會寫入到Web服務器的錯誤日誌文件中,因此您無需執行其他任何操作 - 它已經完成。

爲了回答你問題的第二部分,如果你不想在屏幕上顯示的原始錯誤信息,您可以防止這種情況的方式有兩種:

  1. 使用@符號你的函數調用的前面 - 例如$db = @mysql_connect(...);。這將僅針對該特定函數調用關閉錯誤報告。過度使用這種技術通常被認爲是一個糟糕的主意,但偶爾會這樣做是合法的。

  2. 更好的選擇可能是把全球的錯誤報告標誌了,無論是在你的PHP.ini,在本地.htaccess文件或程序中使用ini_set()

通常,網頁上的錯誤報告只應在您開發網站時使用。一旦網站開始運行,你應該把錯誤報告,這樣你就不能讓PHP錯誤顯示出來在你的精心構造的網頁佈局隨機的地方在你的客戶面前。發生的任何錯誤仍將寫入服務器錯誤日誌中,但不會顯示在頁面上。

對於MySQL的錯誤,比如你有一個,你仍然可以通過使用mysql_error()功能得到在程序中的錯誤本身。這將包含發生錯誤的最後一個錯誤的詳細信息,因此您可以通過編程檢查它並報告合理的錯誤消息。

0
try { 
    $dbh = new PDO($dsn, $user, $password); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// if your are not set this attributes you won't get any exceptions. 
} catch (PDOException $e) { 
    echo 'Server error. Please try again some time.'; 
} 
1

來源:http://wallstreetdeveloper.com/php-database-connection/

這裏是在PHP數據庫連接的樣本代碼:

<?php 
//Step-1 : Create a database connection 
$connection=mysql_connect(「localhost」,」root」,」root」); 
if(!$connection) { 
    die(「Database Connection error」 . mysql_error()); 
} 
//Step-2 : Select a database to use 
$db=mysql_select_db(「widget_corp」,$connection); 
if(!$db) { 
    die(「Database Selection error」 . mysql_error()); 
} 
?> 
<html> 
<head> 
<title>Database</title> 
</head> 
<body> 
<?php 
//Step 3 : Perform database Queury 
$result=mysql_query(「select * from subjects」,$connection); 
if(!$result) { 
    die(「No rows Fetch」 . mysql_error()); 
} 

//Step 4 : Use returned data 
while($row=mysql_fetch_array($result)) 
{ 
    //echo $row[1].」 「.$row[2].」<br>」; 
    echo $row["menu_name"].」 「.$row["position"].」<br>」; 
} 

?> 
</body> 
</html> 
<?php 
//Step 5 : Close Connection 
mysql_close($connection); 
?> 
相關問題