mysql - 更新和select语句的奇怪之处

时间:2012-03-07 19:07:39

标签: php mysql select

我有一个奇怪的mysql事情,这是关于以下代码:

$res = mysql_query("SELECT * FROM users WHERE group='".$group."'");
if (mysql_num_rows($res)==1) {

$row = mysql_fetch_assoc($res); 
$uid = $row['uid'];

$user_update = mysql_query("UPDATE fe_users SET group = 5 WHERE  group='".$group."'");           

return 'ok';

} else {

return 'not ok';

}   

我正在检查,如果有用户group = $group。如果是,则将组更新为5,如果没有group=$group的用户,则返回字符串“ok”,因为您可以看到返回字符串“not ok”。

这应该很容易,但现在的问题是,如果有group=$group的用户,更新正确完成,但不是返回“ok”,php返回“not ok”,如如果更新的更改已被考虑用于上述执行选择追溯。我不明白这一点。任何帮助都会非常感激。

Thanx提前, 杰登

4 个答案:

答案 0 :(得分:0)

我不确定这是否有任何优点,但尝试在SELECT和UPDATE命令中使用此样式:WHERE group ='$ group',不使用字符串连接。除此之外,我似乎无法理解为什么你得到更新而不是“ok”返回。

答案 1 :(得分:0)

您正在检查是否mysql_num_rows($res)==1,因此如果该组中只有一个用户,您将返回ok。如果有两个或更多用户,则会返回not ok。可能不是你想要的,对吗?我想你应该检查mysql_num_rows($res)>=1

答案 2 :(得分:0)

我认为'group'是一个保留的关键字,您已将其用作字段名称,更改或使用

$res = mysql_query("SELECT * FROM users WHERE `group`='".$group."'");

$user_update = mysql_query("UPDATE fe_users SET `group` = 5 WHERE  `group`='".$group."'");

如果出现问题,您可以使用count($ res)== 1而不是mysql_num_rows($ res)== 1。

参考: Mysql Reserved keywords

答案 3 :(得分:0)

您可以考虑修改括号的位置,并更改num_rows检查,如下所示:

$res = mysqli_query("SELECT uid FROM users WHERE `group` ='".$group."'");
if (mysqli_num_rows($res)>0) {//there was a result
    while($row = mysqli_fetch_assoc($res)){
        // grab the user id from the row
        $uid = $row['uid'];
        // and update their record
        $user_update = mysqli_query("UPDATE fe_users SET `group` = 5 WHERE  `group`='".$group."'");           
        if(mysqli_num_rows($user_update)==1){
            return 'ok, updated user';
        } else {
        // database error
            return 'not ok, unable to update user record';
        }  
    }//end while row
}else{
    return 'No results were found for this group.';
}

通过仅选择所需的列,可以减少查询的开销。通过将初始结果与0而不是1进行比较,您可以允许具有许多成员的组。通过将更新函数包装在while循环中,您可以遍历所有返回的结果,并更新每个结果的记录。通过移动返回'ok'/'not ok'的测试来检查更新操作是否成功,您就能够隔离数据库错误。最后的else语句告诉您是否由于没有该组的成员而没有执行更新操作。

BTW,对于未来兼容的代码,我建议使用mysqli,因为正式弃用了“mysql_query”系列的PHP函数。请参阅http://www.php.net/manual/en/mysqli.query.php以便快速入门,这基本上是相同的。