Php 我的数据库没有';t更新
我想要的是,我想要获取状态为1且getp=0的所有记录,然后在循环内部,对于我想要将getp值更改为1的每个记录,它是正确的,但不知道哪里是错误的。请将更新命令设置为:Php 我的数据库没有';t更新,php,mysql,sql,database,Php,Mysql,Sql,Database,我想要的是,我想要获取状态为1且getp=0的所有记录,然后在循环内部,对于我想要将getp值更改为1的每个记录,它是正确的,但不知道哪里是错误的。请将更新命令设置为: <?php $db = new mysqli('localhost', 'root', 'root', 'chatting'); $query = "SELECT * FROM user WHERE state = 1 AND getp = 0"; $result = $db->query($
<?php
$db = new mysqli('localhost', 'root', 'root', 'chatting');
$query = "SELECT * FROM user WHERE state = 1 AND getp = 0";
$result = $db->query($query);
$num_result = $result->num_rows;
$mems = "";
for ($i = 0; $i < $num_result; $i++) {
$row = $result->fetch_assoc();
$mems = $row["userName"] . " " . $mems;
$query = "update `user` set `getp` = 1 where 'userName` = ".' $row["userName"] ';
$result = $db->prepare($query);
}
echo $mems;
?>
您忘记执行更新语句了 另外,请注意,这不是准备语句的正确方法。。您必须执行以下操作:
$query = "update `user` set `getp` = 1 where `userName` = '". $row["userName"]. "'";
为什么在for循环中这样做?您只需执行
UPDATE
usersetgetp=1,其中state=1,getp=0代码>
在为$i++循环时?为什么不而($row=$result->fetch_assoc()){…}
但是,将查询更改为
$query = $db->prepare("update `user` set `getp` = 1 where `userName` = :userName");
$query->bind_param(':userName',$row["userName"]);
$result = $query->execute();
不要忘记执行它。重复第二个$query
。你的报价是错误的-你错过了用户名
上的第一个反勾号。另外,您只是在准备查询,而从未实际运行它。您遇到了什么样的错误?@maverabilism我的数据库中getp的值永远不会更改!!你在本地主机工作吗?1。你滥用了事先准备好的陈述;2.您可以通过单个查询来完成此操作,updatetable SET getp=1 WHERE condition
。警告:输入中出现意外字符:“”(ASCII=39)第11行C:\AppServ\www\Last\chat\getOnlineMembers.php中的state=1解析错误:语法错误,第15I行C:\AppServ\www\Last\chat\getOnlineMembers.php中出现意外的$end“。请重试。这完全是错误的做法,因为未正确转义$row[“userName”]
。正确答案是使用bind_param
调用的答案。致命错误:在C:\AppServ\www\Last\chat\getOnlineMembers.php的第13行的非对象上调用成员函数execute()。你确定你没有打字错误吗?如果bind_param
调用成功,则execute
调用应有效。如果不是的话,就不可能走那么远。@tadman我同意。。接受的答案不能防止注入,我无法理解在没有execute()的情况下它是如何为OP工作的。。
$query = 'update `user` set `getp` = 1 where userName = "'. $row["userName"] .'"';