我在将一系列信息插入mysql数据库时遇到了问题。基本上,我创建了一个类似于Facebook相册的可排序库,可以通过将div移动到一个带有jquery可排序功能的新位置来安排。
我正在使用Ajax调用一个php文件,该文件将使div的新顺序进入DB。信息正在正确传递,只是没有正确地插入。
我收到的错误是:
您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以便在第1行使用接近“Array”的正确语法。
代码是:
foreach ($_GET['listItem'] as $position => $item) {
if ($item >= 1) {
$sql[] = "UPDATE table SET order = '{$position}' WHERE id = '{$item}'";
mysql_query($sql) or die(mysql_error());
}
}--如果我移除mysql_query函数,只执行print_r,则得到:
Array
(
[0] => UPDATE table SET order = '0' WHERE id = '2'
[1] => UPDATE table SET order = '1' WHERE id = '4'
[2] => UPDATE table SET order = '2' WHERE id = '3'
[3] => UPDATE table SET order = '3' WHERE id = '1'
[4] => UPDATE table SET order = '4' WHERE id = '5'
[5] => UPDATE table SET order = '5' WHERE id = '6'
)这是我第一次尝试这样做。任何帮助都会很好。
提前感谢您的帮助!
发布于 2012-05-18 18:41:01
在mysql_query($sql)中,$sql是一个数组,因此它的值就是Array。当您分配$sql[] = "UPDATE table SET order = '{$position}' WHERE id = '{$item}'";时,只需将此行设置为$sql = "UPDATE table SET order = '{$position}' WHERE id = '{$item}'";。这应该能解决你的问题。
编辑:
您可以离开[],只需将mysql_query从它所在的位置移除。在foreach列表项之后,添加以下内容:
foreach($sql as $query) {
mysql_query($query);
}发布于 2012-05-18 19:51:21
听起来好像对[]操作符的作用有一些混淆。当要将元素附加到现有数组的末尾时,可以使用[]。
例如:
$sql = array();
$sql[] = 'UPDATE table SET order = "0" WHERE id = "2"';
mysql_query($sql); // this will produce the error you are seeing相对于:
$sql = 'UPDATE table SET order = "0" WHERE id = "2"';
mysql_query($sql); // this will work您应该这样重写您的代码:
foreach ($_GET['listItem'] as $position => $item) {
if ($item >= 1) {
$sql = "UPDATE table SET order = '{$position}' WHERE id = '{$item}'";
mysql_query($sql) or die(mysql_error());
}
}做你想做的事。但是,这仍然不是一个好主意,因为您将不受信任的$_GET数据直接传递到数据库。例如,我可以使用如下字符串调用您的脚本:
http://yoursite.com/yourscript.php?listItem=1'%3B%20DROP%20TABLE%20yourtable%3B由于listItem的值直接传递到数据库--而且$item >= 1检查不够,因为如果字符串以数字数据开头,$item >= 1将计算为整数--我所要做的就是添加一个单引号来终止前面的查询,然后我可以随意插入任何我想要的SQL命令;这是一个基本的SQL注入攻击。每当您编写与数据库有关的代码时,都应该清除可能要到数据库的任何输入。您的代码的最终版本可能如下所示:
foreach ($_GET['listItem'] as $position => $item) {
if ($item >= 1) { // this check may or may not be needed depending on its purpose
$sql = 'UPDATE table SET order = "' . mysql_real_escape_string($position) . '" WHERE id = "' . mysql_real_escape_string($item) . '"';
mysql_query($sql) or die(mysql_error());
}
}还有其他方法可以清除输入数据,这只是其中之一。希望这能有所帮助。
https://stackoverflow.com/questions/10658018
复制相似问题