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

时间:2013-07-05 02:14:40

标签: php mysql arrays foreach

在完成任务而不是回显结果后,我收到错误“错误:查询为空”。我怀疑即使最后一个数组被更新,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>";         
?>

非常感谢

有关发布这些值的表单的详细信息:Create array from form and update mysql

4 个答案:

答案 0 :(得分:2)

问题可能出在:

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

其&#39;在没有定义$sql的情况下运行mysql_query。

虽然我不建议在循环中放置一个查询,因为它浪费了内存,对于您的代码示例 - 尝试将mysql_query()放在变量中,如下所示:

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

答案 1 :(得分:1)

您没有正确检查错误,而是两次调用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_escape_string()

答案 2 :(得分:1)

  1. 您已从循环中排除了查询执行。
  2. 未在任何地方定义 $sql,因此它被威胁为{​​{1}}。
  3. 使用此:

    empty string

    注意: MySQL<?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()); } ?> 个函数)扩展名为deprecated。我建议改为使用MySQLimysql_*函数)或PDO

    注意:您的代码对SQL-Injection次攻击非常敏感。您可以在此问题中阅读解决方案建议:How can I prevent SQL injection in PHP?

答案 3 :(得分:1)

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

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