![](/img/trans.png)
[英]How safe is it to insert $_POST data from an array directly into a MySQL statement?
[英]How to insert data from an EXECUTE statement in mySql?
我在wp_users
表中有数据,我想将该表中的数据(ID列除外)复制到另一个表wp_users2
。
如果我不关心要自动递增的id
列,则可以这样做:
insert into wp_users2 (select *, NULL as ID from wp_users)
因此,我知道我可以通过输入除ID以外的所有列标题并将其手动选择为NULL来做到这一点,
SELECT NULL as id, col2, col3...
但我想动态地做。 我读了一篇 很棒的SO帖子,介绍了如何做到这一点,并且它很有效, 但是我无法弄清楚如何获取它提供给我的数据并将其放入插入语句中。
INSERT INTO wp_users2 (
SET @sql = CONCAT('SELECT NULL as ID,',
(SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), 'ID,', '')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'wp_users'
AND TABLE_SCHEMA = 'wp1'),
' FROM wp_users');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
)
正确的语法是什么?
据我了解-id是AUTO_INCREMENT字段。
因此,请尝试使用此脚本作为任务的示例-
CREATE TABLE table1(
id INT(11) NOT NULL AUTO_INCREMENT,
column1 VARCHAR(255) DEFAULT NULL,
column2 VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id)
);
CREATE TABLE table2(
id INT(11) NOT NULL AUTO_INCREMENT,
column1 VARCHAR(255) DEFAULT NULL,
column2 VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO table1 VALUES
(1, 'c1', 'c2'),
(2, 'c3', 'c4');
SET @source_table = 'table1';
SET @target_table = 'table2';
SET @id = 'id';
SET @columns = NULL;
SELECT group_concat(column_name) INTO @columns FROM information_schema.columns
WHERE
table_schema = 'database_name' -- Set your database name here
AND table_name = @source_table
AND column_name != @id;
SET @insert = concat('INSERT INTO ', @target_table, '(', @id, ',', @columns, ') SELECT NULL, ', @columns, ' FROM ', @source_table);
PREPARE stmt1 FROM @insert;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
set @sql = (select concat('insert into wp_users2 SELECT NULL,',
group_concat(column_name),' from ',table_name) from information_schema.columns
where table_name = 'wp_users' and table_schema = 'wp1' and column_name != 'id'
order by ordinal_position);
prepare stmt1 from @sql;
execute stmt1;
deallocate prepare stmt1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.