2011-10-26 33 views
0

這裏新的,真正的綠色編程,這樣下去容易..Mysql_error()不要再追插入錯誤的PHP

我發現我有一個INSERT這是因爲重複記錄的錯誤而失敗。我通過在帶有文字的MySQL控制檯中運行查詢來解決這個問題,其中出現了錯誤#1062。

我想知道的是爲什麼mysql_error()mysql_errno()在我的PHP腳本中沒有發現這個錯誤。

下面是我所做的一般設置。我有一個提交給調用data_insert()

function data_insert($var1, $var2, $var3, $var4){ 

    $db = db_connect(); 
    $query = "INSERT INTO exampletable (id, id_2, id_3, id_4) 
      VALUES ('$var1', '$var2', '$var3', '$var4')"; 

    $result = $db->query($query); 
     if (!$result) 
      { 
      echo ('Database Error:' . mysql_error()); 
      } 
     else 
      { 
      echo "Data added to db"; 
      } 
} 

數據庫連接的PHP文件形式:

function db_connect() 
{ 
    $result = new MySQLi('localhost', 'root', 'root', 'dbname'); 
    if (!$result) 
     throw new Exception('Could not connect to database server'); 
    else 
     return $result; 
} 

結果我得到的是:

Database Error: 

PHP回聲「數據庫錯誤:「因爲INSERT失敗,但沒有後續的MySQL錯誤信息被回顯。老實說,我不完全確定我應該看到什麼,但通過閱讀其他一些SO問題,我仔細檢查了我的php.ini文件以進行錯誤處理,並且E_ALL和display_errors被適當地設置(儘管不確定是否在這種情況下它很重要)。

有沒有在我的邏輯,我不理解,如鏈接資源mysql_error()採取的範圍?

感謝您的幫助,我希望這是尷尬明顯的事情。

我知道上面是缺少XSS和安全預防措施和統一的異常處理。嬰兒的步驟,但。這裏爲了討論而簡化了。

回答

3

您使用的mysqli(注意)爲您的數據庫操作,但調用mysql_error(無)。它們是兩個完全不同的接口,根本不共享內部狀態。另一個DB句柄/結果不可用。

嘗試mysqli_error()改爲(注意I)。

+0

我就知道這將是基本的東西。謝謝! – PHPeer

0

據我所知,你似乎在使用MySQLi類來進行連接和查詢,但你試圖訪問MySQL錯誤消息。 MySQLi和MySQL不一樣,所以一個錯誤不會顯示在另一箇中。你應該查看MySQLi的錯誤處理,而不是MySQL。

+0

就是這樣,謝謝你的幫助。 – PHPeer

0

你混淆了連接到MySQL數據庫的兩種獨立方法。

mysql_error()只適用於通過mysql_query()運行的查詢。

當您使用的mysqli,你必須使用mysqli_error()