2011-06-22 111 views
2

我有以下的PHP代碼應該連接到數據庫並更新一些信息。但它不會更新。它沒有給出任何錯誤,它連接就好... sql語句似乎沒有工作,但一切看起來都對我好。SQL語句不更新

if ($send != "no") {    
       $db_name = "auctionfinal"; 
       $table_name = "auctions"; 
       $connection = @mysql_connect("auctionfinal.db.6084638.hostedresource.com", "xxxx", "xxxx") or die(mysql_error()); 
       $db = @mysql_select_db($db_name, $connection) or die(mysql_error()); 

       $sql = "UPDATE $table_name SET curbid = '$_POST[price]', nbids = '$totalnbid' WHERE aucname = '$auc' "; 

       $result = @mysql_query($sql, $connection) or die(mysql_error()); 

       if ($result) { 
        echo "Thank you! You have bid on the auction for $auc, the current bid is $curbid, there have been $nbids bids on this auction so far."; 
       } 
      } else if ($send == "no") { 
       echo "$user_err"; 
      } 
+4

對於初學者,從所有這些函數調用中刪除'@',以便您可以看到任何錯誤。 –

+4

[Bobby桌](http://xkcd.com/327/)發送問候。 –

+0

即使沒有@我也沒有錯誤 – Expecto

回答

0

這是您在字符串內部使用可變展開的風險之一。

本聲明:

$sql = "UPDATE $table_name SET curbid = '$_POST[price]', nbids = '$totalnbid' WHERE aucname = '$auc' "; 

...會更好的寫法如下:

$sql = "UPDATE ".$table_name." SET curbid = '".mysql_real_escape_string($_POST['price'])."', nbids = '".mysql_real_escape_string($totalnbid)."' WHERE aucname = '".mysql_real_escape_string($auc)."' "; 
+0

改變,什麼都不做,仍然沒有錯誤 – Expecto

+2

然後,你需要開始把調試打印,以便你可以看到它認爲它在做什麼。 – staticsan

+0

雖然在將這些變量交給mysql_query()之前,需要對這些變量使用mysql_real_escape_string(),但雙引號字符串插值沒有風險。如果正確使用和理解,PHP是一個很有價值的特性,它提供了出色的可讀性,並且比幾十個連接和引用它們所需的引用少得多。 –

3

它不給任何錯誤,因爲你告訴PHP忽略的錯誤。從所有的mysql函數調用前刪除「@」,你會得到錯誤。

1

php mysql函數前面的「@」符號可以消除任何錯誤。 刪除它,然後你會看到是否有任何錯誤。