Php mysql-update和select语句很奇怪
我这里有一个奇怪的mysql事件,它是关于以下代码的:Php mysql-update和select语句很奇怪,php,mysql,select,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 gro
$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
的用户。如果是这样,组更新为5,然后返回字符串“ok”,如果不存在group=$group
的用户,可以看到返回字符串“not ok”
这应该很容易,但现在的问题是,如果有一个用户具有group=$group
,则更新会正确完成,但php不会返回“ok”,而是返回“not ok”,就好像上面执行的select追溯考虑了更新的更改一样。我不明白。任何帮助都将不胜感激
Thanx提前,
Jayden我不确定这是否有任何优点,但请尝试在SELECT和UPDATE命令中使用此样式:其中group='$group',而不使用字符串联接。除此之外,我似乎不明白为什么你得到了一个更新而没有被返回“ok”。你正在检查是否
mysql\u num\u rows($res)==1
,因此如果该组中只有一个用户,你将返回ok
。如果有两个或更多用户,它将返回notok
。可能不是你想要的,对吧?我认为您应该检查mysql\u num\u rows($res)>=1我认为“group”是一个保留关键字,您已经将其用作字段名,可以更改它,也可以类似使用
$res = mysql_query("SELECT * FROM users WHERE `group`='".$group."'");
及
如果出现问题,可以使用count($res)==1而不是mysql_num_rows($res)==1
参考: > P>你可以考虑修改你的括号的位置,并改变你的NUMLARE检查,比如:
$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)进行比较,可以允许具有多个成员的组。通过将update函数包装在while循环中,可以循环所有返回的结果,并更新每个结果的记录。通过移动返回“ok”/“not ok”的测试以检查更新操作是否成功,您可以隔离数据库错误。最后一条else语句告诉您是否因为组中没有成员而未执行更新操作
顺便说一句,对于将来的兼容代码,我建议使用mysqli,因为官方不推荐使用“mysql\u query”系列PHP函数。请参见快速入门,大致相同。上下文是什么?这是函数的代码吗?这是ajax响应的代码吗?它是一个函数,没有ajax,我构建了一个没有参数的场景,但仍然是一样的。如果我从If部分删除更新查询,则If部分中的所有其他代码都会正确执行,但是如果没有删除更新查询,它是if部分中唯一被执行的部分,除了查询之外,else部分也被执行。这很奇怪,因为update查询在if语句中,而不是else语句中。你能一步一步地调试你的代码吗?如果没有,请尝试在update语句后放置一个
die('here')
,并查看函数是否停止执行。这是一个好主意,感谢您的输入,alesdario。目前我已经做了一个解决办法,因为还有足够多的其他事情要做,但是如果我发现了这种行为的原因,我会把它贴在这里。也许是一些很琐碎的事情。。。
$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.';
}