簡體   English   中英

MYSQL,PHP:將記錄從一個數據庫插入另一個數據庫

[英]MYSQL, PHP: Insert records from one database to another

我有必要將一些記錄從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%確信單引號引起了錯誤,但是為什么會出現錯誤?

按照您的原始帖子https://stackoverflow.com/revisions/31116693/1並完全覆蓋您的原始帖子,而不將其標記為編輯:

您正在使用MySQL import保留字
https://dev.mysql.com/doc/refman/5.5/zh-CN/keywords.html

它需要包裹在tick中

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的評論所述,使用准備好的陳述並加以處理。

import是MYSQL中的保留字。 因此,您需要在查詢中使用反引號(``)。

所以重寫如下:

 $import = mysqli_query($conn_i,"INSERT INTO `import` ($columns_r) values ($values_r)");

如果不使用PHP,則可以使用MySql查詢,該查詢將按以下方式執行插入操作:-

$columns_r='`name`,`class`';

mysqli_query($conn_i,"INSERT INTO `import` ({$columns_r}) select {$columns_r} from `export`");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM