我有必要将一些记录从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();}
它给了我错误:
错误:您的SQL语法出错;
这是语法的外观:
INSERT INTO `NOTimport` ('xx,xx,xx,xx,xx,xx,xx,xx') values ('11,'11,E,2079,1931,xx,xx,x')
我99%确定单引号导致错误,但为什么会出现?
答案 0 :(得分:5)
根据您的原始帖子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)
或将该表重命名为保留字以外的其他内容。
另外,$values_r
可能需要引用,并且取决于通过$columns_r
传递的内容,您可能需要使用周围的刻度。
即:
INSERT INTO `import` (`$columns_r`) values ('".$values_r."')
即便如此,这对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);
或$conn_i
我对这里的变量感到困惑。如果您使用相同的数据库,请保持一致。
编辑:
正如chris85的评论中所述,使用准备好的陈述并完成它。
答案 1 :(得分:1)
import
是MYSQL中的保留字。因此,您需要在查询中使用反引号(``)。
重写如下:
$import = mysqli_query($conn_i,"INSERT INTO `import` ($columns_r) values ($values_r)");
答案 2 :(得分:0)
不使用PHP,您可以使用将执行插入操作的MySql查询: -
scipy.stats.powerlaw