Php SQL将具有不匹配列的行从一个表移动到另一个表

Php SQL将具有不匹配列的行从一个表移动到另一个表,php,mysql,Php,Mysql,我找到了很多关于如何使用先选择后删除插入的示例 我希望将数据从一个表移动到另一个表,但列不匹配 比如说 表1(id,location,lat,lon,添加日期) 表2(id,location,lat,lon,添加日期,请求) 基本上,我想在表2中插入表1中的一行,并将$\u SESSION['user\u name']添加到请求的字段中,然后从第一个表中删除原始行 我试过几种不同的方法 $sql = "START TRANSACTION; INSERT INTO bia_signs_pendin

我找到了很多关于如何使用先选择后删除插入的示例

我希望将数据从一个表移动到另一个表,但列不匹配 比如说

表1(
id
location
lat
lon
添加日期

表2(
id
location
lat
lon
添加日期
请求

基本上,我想在表2中插入表1中的一行,并将$\u SESSION['user\u name']添加到请求的字段中,然后从第一个表中删除原始行

我试过几种不同的方法

$sql = "START TRANSACTION;
INSERT INTO bia_signs_pending (SELECT * FROM bia_signs WHERE id = ".$_GET['sign_id'].');

DELETE FROM bia_signs WHERE id = '          .$_GET['sign_id'].';
UPDATE bia_signs_pending SET requested='    .$_SESSION['user']['email'].
'WHERE id = '.$_GET['sign_id'].';
COMMIT;';
//由于列不匹配,此项将中断


有什么建议吗?

更改您的INSERT语句,添加您正在选择的字段列表:

INSERT INTO bia_signs_pending (id, location, lat, lon, date_added)
            SELECT * FROM bia_signs WHERE id = '{$_GET['sign_id']}';

您可以对列名使用
INSERT

INSERT INTO TABLE2 (id, location, lat, lon, date_added)
SELECT id, location, lat, lon, date_added 
FROM table1 
WHERE ...
您可以将常量添加到
INSERT

INSERT INTO TABLE2 (id, location, lat, lon, date_added, requested)
SELECT id, location, lat, lon, date_added, 'Jonny'
FROM table1
WHERE ...

只需更改插入内容

INSERT INTO bia_signs_pending (SELECT FROM bia_signs WHERE id = ".$_GET['sign_id'].');


您应该仔细阅读准备好的查询和sql注入攻击。在这里的示例中,我的表相当简化。但是,我将如何添加附加字段“requested”。我是否需要向事务中添加UPDATE子句,或者是否有更有效的方法将其添加到insert子句中?我尝试了这种方法,但我认为表名必须位于(columnName,colname2…)前面,就像Ian Kenney的Post对不起一样。在复制/粘贴到这里之前,我做了一些编辑,因此我的原稿有*确保关于
,在插入的结尾处,您缺少一个
INSERT INTO bia_signs_pending (id, location, lat, lon, date_added) VALUES (SELECT * FROM bia_signs WHERE id = '".$_GET['sign_id'].');