我在完成任务后得到一个错误"错误:查询为空",而不是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-使用
mysqli
或PDO
- 请确保正确地将输入转义为SQL查询。使用mysql_real_eescape_string()
- 您已将查询执行从循环中排除
- 您没有在任何地方定义
$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
($sql
0函数)或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>";
?>