Foreach循环在最后一个数组更新后仍然执行


Foreach loop still execute after the last array is updated

我在完成任务后得到一个错误"错误:查询为空",而不是echo结果。我怀疑即使最后一个数组更新了,FOREACH仍然试图执行查询。我说得对吗?

如果是,我该如何更正?

<?php
    $con = mysql_connect("localhost", "$username" , "$password");
    mysql_select_db($database, $con);
?>
<?php
  foreach ($_POST['id'] as $key=>$id)
  {
    $order = $_POST['order'][$key];
    mysql_query("UPDATE table SET `order`=$order WHERE `id` = $id");
  }
    if (!mysql_query($sql,$con))
     {
       die('Error: ' . mysql_error());
     }
       echo "<div class='"result'">**1 record updated**</div>";         
?>

非常感谢

关于发布这些值的表单的更多信息:从表单创建数组并更新mysql

问题可能出现在:

 if (!mysql_query($sql,$con))

其'在没有定义CCD_ 1的情况下运行mysql_query。

尽管我不建议将查询放入循环中,因为这是浪费内存,但对于您的代码示例,请尝试将mysql_query()放入这样的变量中:

$sql = mysql_query("UPDATE table SET `order`=$order WHERE `id` = $id");

您没有正确检查错误,而是调用了两次mysql_query。这样做:

<?php
foreach ($_POST['id'] as $key=>$id)
{
  $order = $_POST['order'][$key];
  $result = mysql_query("UPDATE table SET `order`=$order WHERE `id` = $id");
  if ($result === false)
  {
    die('Error: ' . mysql_error());
  }
  echo "<div class='"result'">**1 record updated**</div>";         
}
?>

强制性通知:

  • 不要使用mysql-使用mysqliPDO
  • 请确保正确地将输入转义为SQL查询。使用mysql_real_eescape_string()
  1. 您已将查询执行从循环中排除
  2. 您没有在任何地方定义$sql,所以它被称为empty string

使用此:

<?php
foreach ($_POST['id'] as $key => $id)
{
    $order = mysql_real_escape_string($_POST['order'][$key], $con);
    $id    = mysql_real_escape_string($id, $con);
    $sql   = "UPDATE table SET `order` = $order WHERE `id` = $id";
    if(!mysql_query($sql, $con))die(mysql_error());
}      
?>

注意:MySQLmysql_*函数)扩展已弃用。我建议使用MySQLi$sql0函数)或PDO

注意:您的代码容易受到SQL注入攻击。您可以阅读以下问题的解决方案建议:如何防止PHP中的SQL注入?。

在其他情况下,您以前检查过连接吗?如果可以的话,试试这个

<?php
  foreach ($_POST['id'] as $key=>$id)
  {
    $order = $_POST['order'][$key];
    $query = "UPDATE table SET `order`=$order WHERE `id` = $id";
    $result = mysql_query($query) or die("Query failed : " . mysql_error());
  }
    if (!$result)
     {
       die('Error: ' . mysql_error());
     }
       echo "<div class='"result'">**1 record updated**</div>";         
?>