[英]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.