Php 更新最后一个数组后,Foreach循环仍将执行

Php 更新最后一个数组后,Foreach循环仍将执行,php,mysql,arrays,foreach,Php,Mysql,Arrays,Foreach,在完成任务后,我得到一个错误“error:Query为空”,而不是echo结果。我怀疑即使最后一个数组被更新,FOREACH仍会尝试执行查询。我说得对吗 如果是,我如何更正 <?php $con = mysql_connect("localhost", "$username" , "$password"); mysql_select_db($database, $con); ?> <?php foreach ($_POST['id'] as $key=&

在完成任务后,我得到一个错误“error:Query为空”,而不是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\u查询两次。这样做:

<?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-使用
    mysqli
    PDO
  • 请确保正确转义SQL查询的输入。使用mysql\u real\u escape\u string()

    • 您没有正确检查错误,而是调用了两次mysql\u查询。这样做:

      <?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-使用
        mysqli
        PDO
      • 请确保正确转义SQL查询的输入。使用mysql\u real\u escape\u string()
    • 您已从循环中排除查询执行
    • 您没有在任何地方定义
      $sql
      ,因此它被视为
      空字符串
    • 使用以下命令:

      <?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());
      }      
      ?>
      
      
      
      注意:
      mysql\uquot.*
      函数)扩展名为。我建议使用(
      mysqli.*
      functions)或相反

      注意:您的代码容易受到攻击。您可以阅读此问题中的解决方案建议:

    • 您已从循环中排除查询执行
    • 您没有在任何地方定义
      $sql
      ,因此它被视为
      空字符串
    • 使用以下命令:

      <?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());
      }      
      ?>
      
      
      
      注意:
      mysql\uquot.*
      函数)扩展名为。我建议使用(
      mysqli.*
      functions)或相反


      注意:您的代码容易受到攻击。您可以阅读此问题中的解决方案建议:。

      问题可能存在于:

       if (!mysql_query($sql,$con))
      
      它的“运行mysql\u查询而不定义
      $sql

      虽然我不建议将查询放入循环中,因为这会浪费内存,但对于您的代码示例,请尝试将
      mysql\u query()
      放入如下变量中:

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

      问题可能在于:

       if (!mysql_query($sql,$con))
      
      它的“运行mysql\u查询而不定义
      $sql

      虽然我不建议将查询放入循环中,因为这会浪费内存,但对于您的代码示例,请尝试将
      mysql\u query()
      放入如下变量中:

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

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

      <?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>";         
      ?>
      

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

      <?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>";         
      ?>
      
      
      
      您在什么时候填充了
      $sql
      ?不在上面的代码中。。。这是导致错误的空查询。至少,您必须保护
      $id
      不受sql注入的影响。如果它是一个整数,则执行
      $id=intval($id)
      print\r($\u POST)看起来像是又多了一个id然后是订单!mysql_query($sql,$con)但是你在哪里设置$sql呢?我刚刚用init文件的内容更新了这个问题。是的,Dagon,我从一个表单中有几个ID和订单。您在什么时候填充了
      $sql
      ?不在上面的代码中。。。这是导致错误的空查询。至少,您必须保护
      $id
      不受sql注入的影响。如果它是一个整数,则执行
      $id=intval($id)
      print\r($\u POST)看起来像是又多了一个id然后是订单!mysql_query($sql,$con)但是你在哪里设置$sql呢?我刚刚用init文件的内容更新了这个问题。是的,达贡,我有几个身份证和表格上的订单。谢谢!但是想知道为什么即使没有$sql=Thank,它仍然会更新表!但是想知道为什么即使没有$sql=Thank,它仍然更新表,我使用了你的方法并添加了这个=>foreach($\u POST['id']as$key=>$ids){$id=mysql\u real\u escape\u string(ids);…}谢谢,我使用了你的方法并添加了这个=>foreach($\u POST['id']as$key=>ids){$id=mysql\u real\u escape\u string(ids);…}