2014-01-08 152 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值)。