MySQL中的多行INSERT

时间:2016-01-10 05:09:41

标签: mysql

我正在尝试使用SQL将多行添加到数据库中,并且错误消息

"您的SQL语法有错误;查看与您的MariaDB服务器版本对应的手册,以获得正确的语法,以便在'' imglist'附近使用。 (' urlImg',' idProduct')价值观(' C //',' 1')(' C // '' 1')(' C ^ //'' 1')(' C ^ //',& #39; 1')'在第1行"

这是此功能的代码

$sql = 'INSERT INTO \'imgList\' (\'urlImg\', \'idProduct\') VALUES';

for($i=0;$i<10;$i++){

$sql .= '(\'' . $_POST['urlImg'][$i] . '\',\'' 

              . $_POST['idProduct'][$i] .'\')';

                if ($i<count($_POST['urlImg']) - 1) {
                   $sql .= ',';
                }
}

1 个答案:

答案 0 :(得分:0)

嗯,首先,像其他人说的那样,永远不要将值直接连接到SQL字符串中。它不仅会让您面临SQL注入的风险,而且如果您的数据中有单引号也会失败。

如果您构建的查询失败,则使用echo输出并检查它。您看到的错误是因为您在表和列名称周围放置单引号('),这是错误的。你应该使用反引号(`)或不使用任何东西 - 引号仅用于文字字符串。

$sql = 'INSERT INTO `imgList` (`urlImg`, `idProduct`) VALUES ';

但是您的代码还有其他问题。即使for($i=0;$i<10;$i++){中只有1个元素,$_POST['urlImg']也会循环10次,从而导致错误。并且由VALUES('C//','1')('C//','1')('C//','1')('C//','1')错误地判断,代码的这一部分:

if ($i<count($_POST['urlImg']) - 1) {
                   $sql .= ',';
                }

甚至无法正常工作,因为在(...)之间甚至没有插入逗号。不知道为什么,当我自己尝试时,它工作得很好,也许你没有表现出什么。