我正在尝试更新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);
查询文本正确完成(echo显示创建的不同行),但数据库中的更改仅在第一个循环(第一个查询)中完成,我没有收到任何错误。我可能缺少什么? 提前谢谢!
答案 0 :(得分:0)
这是您应该使用预准备语句的绝佳示例。
我举一个例子,它也可以防止SQL注入。
$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类型,只需将{i'替换为bind_param()
中的's'。