用循环插入多行

时间:2010-06-22 16:46:33

标签: php mysql insert mysql-error-1064

代码:

for($i = 1; $i <= $arr['var']; $i++) {

  if($i == $arr['var']):

    $insert .= '('.$n_id.', 12)';

  else:

    $insert .= '('.$n_id.', 12),';

  endif;

}

$uz = mysql_query("INSERT INTO `cars`
                   (n_id, auto_id)
                   VALUES
                   '$insert'") or die(mysql_error());

为什么它会给我一个SQL语法错误?我做错了什么?

4 个答案:

答案 0 :(得分:1)

您在INSERT语句中缺少字符串连接:

$uz = mysql_query("INSERT INTO `cars`
                     (n_id, auto_id)
                   VALUES "
                    . $insert .") or die(mysql_error());

假设你的元组支持的尾随逗号也没有问题。

答案 1 :(得分:0)

  • 您的查询未展开,是:

    INSERT INTO `cars` (n_id, auto_id) VALUES '$insert'
    

    然后,随着$insert展开,它可能看起来像这样:

    INSERT INTO `cars` (n_id, auto_id) VALUES '(1,12),(2,12),(3,12)';
    
  • 数据列表周围的单引号(')不应该存在,因为单引号会分隔字符串。

  • 相反,你想要:

    INSERT INTO `cars` (n_id, auto_id) VALUES (1,12),(2,12),(3,12);
    

    将其重新折叠到PHP中,最终得到:

    INSERT INTO `cars` (n_id, auto_id) VALUES $insert
    

tl; dr:删除' s。

答案 2 :(得分:-1)

使用反引号(在汽车周围)与单引号(在$ insert附近)混合使用时,据我所知,在mySQL中。选择一个或另一个 - 可能建议使用单引号进行标准化。

答案 3 :(得分:-1)

General SQL Management上,它将此示例用于插入:

INSERT INTO [table]
( [field1], [field2], [field3] ) VALUES
( '[value1.1]', '[value1.2]', '[value1.3]' ),
( '[value2.1]', '[value2.2]', '[value2.3]' ),
( '[value3.1]', '[value3.2]', '[value3.3]' ),
etc.

您可能遇到一些语法问题。我建议打印

"INSERT INTO `cars`
       (n_id, auto_id)
       VALUES
       '$insert'"

查看您要发送的内容。