MYSQL,PHP:将记录从一个数据库插入另一个数据库

时间:2015-06-29 13:13:11

标签: php mysql

我有必要将一些记录从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%确定单引号导致错误,但为什么会出现?

3 个答案:

答案 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