我有必要将一些记录从database1中的一个table1插入到database2中的另一个table2.到目前为止我有这个..
$records_r = mysqli_fetch_assoc(mysqli_query($conn_r, "SELECT * FROM `export` WHERE ID < 100"));
$columns_r = implode(",",array_keys($records_r));
$values_r = implode(",",array_values($records_r));
$import = mysqli_query($conn_i,"INSERT INTO NOTimport ($columns_r) values ($values_r)");
if (!$import) {
printf("Error: %s\n", mysqli_error($conn_i));
exit();}
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
错误:SQL语法中有错误;
这是语法的外观:
INSERT INTO `NOTimport` ('xx,xx,xx,xx,xx,xx,xx,xx') values ('11,'11,E,2079,1931,xx,xx,x')
Run Code Online (Sandbox Code Playgroud)
我99%确定单引号导致错误,但为什么会有?
根据您的原始帖子https://stackoverflow.com/revisions/31116693/1并完全覆盖原始帖子而不将其标记为编辑:
您正在使用MySQL import保留字
https://dev.mysql.com/doc/refman/5.5/en/keywords.html
它需要包裹在刻度线中
INSERT INTO `import` ($columns_r) values ($values_r)
Run Code Online (Sandbox Code Playgroud)
或者将该表重命名为保留字以外的其他内容.
另外,$values_r可能需要引用,并且根据所传递的内容$columns_r,您可能需要使用周围的刻度.
即:
INSERT INTO `import` (`$columns_r`) values ('".$values_r."')
Run Code Online (Sandbox Code Playgroud)
即便如此,这对SQL注入也是开放的.
因此,根据您使用这些值进行编辑values ('11,'11,E,2079,1931,xx,xx,x'),只需引用值,因为您在那里有一些字符串.MySQL将区分这些值.
逃避你的价值观:
$values_r = implode(",",array_values($records_r));
$values_r = mysqli_real_escape_string($conn_r, $values_r);
Run Code Online (Sandbox Code Playgroud)
或者$conn_i我对这里的变量感到困惑.如果您使用相同的数据库,请保持一致.
编辑:
正如chris85的评论中所述,使用准备好的陈述并完成它.
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |