我有一个奇怪的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提前, 杰登
答案 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。
答案 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以便快速入门,这基本上是相同的。