在完成任务而不是回显结果后,我收到错误“错误:查询为空”。我怀疑即使最后一个数组被更新,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
答案 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>";
}
?>
强制性通知:
mysqli
或PDO
答案 2 :(得分:1)
$sql
,因此它被威胁为{{1}}。使用此:
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。我建议改为使用MySQLi
(mysql_*
函数)或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>";
?>