Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql-update和select语句很奇怪_Php_Mysql_Select - Fatal编程技术网

Php mysql-update和select语句很奇怪

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

我这里有一个奇怪的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
的用户。如果是这样,组更新为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.';
}