PHP中的PHP mysql_query仅适用于第一个循环

时间:2014-04-11 12:01:25

标签: php mysql loops for-loop

我正在尝试更新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显示创建的不同行),但数据库中的更改仅在第一个循环(第一个查询)中完成,我没有收到任何错误。我可能缺少什么? 提前谢谢!

1 个答案:

答案 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();

提示:如果notifsn_rec是varchar / text类型,只需将{i'替换为bind_param()中的's'。