我的SQLite3数据库中有一些表,例如
所有表都有一个名为id的字段(整数NOT NULL PRIMARY KEY UNIQUE)( not auto increment )
我的目标是复制其中一个表的记录,只更改id字段(使用新的id)。我想这样做而不必知道每个表中所有列的名称。
我尝试了这个解决方案,它可以工作,但这样我就必须知道所有列的名称
INSERT INTO table1 (id,column1,column2,column3)
SELECT NEWID,column1,column2,column3 FROM table1
WHERE id = OLDID
我还尝试了创建临时表的方法,但没有成功
我必须运行像PRAGMA table_info(table1)
这样的查询,将列的名称保存在数组中,然后运行使用循环创建的查询?
感谢
我的解决方案
$TABLENAME = "mytablename";
$ID = 1423659222480;
$NEWID = 1423659222481;
$db = new PDO('sqlite:db.sqlite3');
$result_columns = $db->query("PRAGMA table_info(".$TABLENAME.")");
$appColumns = array();
$appColumns2 = array();
foreach ($result_columns as $row) {
array_push($appColumns, $row["name"]);
if($row["name"] != "id") array_push($appColumns2, $row["name"]);
}
$appColumns = implode(",",$appColumns);
$appColumns2 = implode(",",$appColumns2);
$appColumnsWithoutID = $NEWID.",".$appColumns2;
$queryDuplicate = "INSERT INTO ".$TABLENAME." (".$appColumns.") SELECT ".$appColumnsWithoutID." FROM ".$TABLENAME." WHERE id = ".$ID;