我正在尝试更新 mysql 数据库中的一些不同寄存器,从 php 中的 FOR 循环发送命令,但查询仅在第一个循环中完成。代码如下:
$conexion = mysql_connect($hostname, $user, $pass) or die ("Error establishing connection with the Database");
mysql_select_db($db,$conexion) or die("Error selecting the Database");
$j=0;
for ($i=0;$i<count($notifs);$i++){
$sql="UPDATE tef SET notif='$notifs[$i]' WHERE sn_rec='$unsersn_recs[$j]';";
echo $sql."<br>";
$res=mysql_query($sql, $conexion) or die (mysql_error());
$j++;
}
mysql_close($conexion);
查询文本已正确完成(回显显示创建的不同行),但数据库中的更改仅在第一个循环(第一个查询)中完成,并且我没有收到任何错误。我可能缺少什么? 提前致谢!
最佳答案
这是一个很好的例子,您应该在其中使用准备好的语句。
我给你一个例子,它也可以防止 SQL 注入(inject)。
$mysqli = new mysqli($hostname, $user, $pass, $db);
if (mysqli_connect_errno()) {
die("Error establishing connection!");
}
$stmt = $mysqli->prepare("UPDATE tef SET notif=? WHERE sn_rec=?");
$j=0;
for ($i=0;$i<count($notifs);$i++) {
$stmt->bind_param('ii', $notifs[$i], $unsersn_recs[$j]);
$stmt->execute();
if(!empty($stmt->error)) echo $stmt->error;
$j++;
}
$stmt->close();
$mysqli->close();
提示:如果 notif
或 sn_rec
是 varchar/text 类型,只需将 bind_param()
中的“i”替换为“s”即可>.
关于FOR 内的 PHP mysql_query 仅适用于第一个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23012002/