2014-01-08 106 views
1

我試圖更新我的數據庫中的第一行。我使用Limit 1只更新第一行,但沒有任何事情發生。絕對有匹配的行,但數據庫中沒有任何更改。更新第一行mysql php

下面是代碼:

foreach ($player_fromsite as $match_player_in_game) { 

    //$querytwo = 'INSERT INTO `'.$tablename.'` '.' (`'.$match_player_in_game.'`) '.'VALUES'.'("' . 'yes' . '")'; 

    $querytwo = 'UPDATE '.$tablename.' SET `'.$match_player_in_game.'` = "'.'yes'.'" WHERE `'.$match_player_in_game.'` = "'.'NULL'.'" LIMIT 1'; 

    $querythree = 'UPDATE '.$tablename.' SET `'.$match_player_in_game.'` = "'.'yes'.'" WHERE `'.$match_player_in_game.'` = "'.'NULL'.'" LIMIT 1'; 

    for($a=0;$a<11;$a++){ 
     if($match_player_in_game == $home_players[$a]){ 
      // Insert a row of information into the table "example" 
      mysql_query($querytwo) or die(mysql_error());  
     }else{ 
      mysql_query($querythree) or die(mysql_error()); 
     } 
    } 
} 

是查詢是否正確?

+0

你能發佈一個生成的SQL樣本,​​而不是你的PHP代碼嗎? –

+2

請不要**在新應用程序中使用mysql_query,如果您在這裏使用不正確,它將被棄用,並且會從未來版本的PHP中刪除。像[PDO這樣的現代化替代品並不難學](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)。像[PHP正確的方式](http://www.phptherightway.com/)這樣的指南將幫助您避免出現這樣的錯誤。 **總是** [妥善轉義](http://bobby-tables.com/php)任何和所有的值,以避免嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 – tadman

+0

感謝那 – Procode

回答

1

在MySQL中使用IS NULLNULL進行比較。

例如:「UPDATE table SET field = 'yes' WHERE field IS NULL

0

NULL不是一個字符串,所以你不應該使用=「NULL」,除非你真正將其設置爲字符串值。改用IS NULL。

+0

我刪除了空的聲明,並給了我相同的結果 – Procode

0

您需要定義「第一行」。第一行基於自動遞增的id值?首先基於時間戳日期?你需要指定這個,因爲MySQL沒有「第一行」的概念。

例如,如果你做這樣的事情在MySQL:

SELECT * FROM table LIMIT 1 

你不能保證每次都得到相同的記錄了。

您很可能需要在關鍵列上指定ORDER BY條件,因爲沒有它,您不能保證您的LIMIT 1將應用於哪一行。我真的不能想到在沒有ORDER BY條款的情況下可能會使用LIMIT的情況,因爲這兩者真的是並駕齊驅。

所以您的查詢應該是這樣的:

UPDATE table 
SET field = 'yes' 
WHERE field IS NULL 
ORDER BY some_key_field ASC 
LIMIT 1 

注意,即使此查詢不會每次都更新同一行。它將更新指定字段具有NULL值的第一條記錄(由ORDER BY指定)。所以如果你運行這個查詢10次,它會改變10個不同的記錄(假設有很多記錄有NULL值)。