0

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

4

4 回答 4

2

问题可能出在:

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

它的运行 mysql_query 没有$sql被定义。

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

$sql = mysql_query("UPDATE table SET `order`=$order WHERE `id` = $id");
于 2013-07-05T02:31:39.490 回答
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>";         
?>
于 2013-07-05T03:00:41.057 回答
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()
于 2013-07-05T02:20:10.800 回答
1
  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());
}      
?>

注意:( MySQL函数mysql_*)扩展已弃用。我建议使用MySQLi( mysqli_*functions) 或PDO代替。

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

于 2013-07-05T02:24:49.487 回答