2012-03-07 89 views
0

奇怪的事情我有一个奇怪的mysql-事情会在这里,它是关于下面的代码:MySQL的 - 用更新和select语句

$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,然后返回字符串“ok”,如果没有group=$group的用户存在,就可以看到字符串“不好”被返回。

这应该很容易,但现在的问题是,如果有一个用户group=$group,更新是正确完成的,但不返回“OK”,PHP返回“不好”,就好像更改从上面执行的选择中更新被追溯地考虑在内。我不明白这一点。任何帮助将非常感激。

Thanx提前, 杰登

+0

什么是上下文?这是函数的代码吗?这是ajax响应的代码吗? – alesdario 2012-03-07 19:21:04

+0

这是一个函数,没有ajax,我建立了一个没有参数的场景,但仍然是一样的。如果我从if部分删除更新查询,那么if部分中的所有其他代码都会正确执行,但如果未删除update-query,那么它是执行的if部分中的唯一内容,除了查询else-part被执行。 – jayden 2012-03-08 19:23:36

+0

这很奇怪,因为更新查询在if语句中,而不在else语句中。你能一步步调试你的代码吗?如果没有,请尝试在update-statement之后放置'die('here')'并查看函数是否停止执行。 – alesdario 2012-03-08 20:11:18

回答

0

我觉得“群”是你作为一个字段名称,更改或使用像

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

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

,你可以使用数保留关键字($水库)== 1而不是mysql_num_rows($ res)== 1如果是问题。

参考:Mysql Reserved keywords

0

我不知道这有什么好处,而是尝试在你的SELECT和UPDATE使用这种样式的命令:WHERE组=“$组”,不使用字符串连接。除此之外,我似乎无法明白你为什么得到更新,而不是被返回“好”。

0

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

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语句告诉你是否没有执行更新操作,因为没有该组的成员。

顺便说一句,对于将来兼容的代码,我推荐使用mysqli,因为“mysql_query”系列PHP函数已正式被弃用。快速启动见http://www.php.net/manual/en/mysqli.query.php,这在很大程度上是一回事。