0

我有两个独立的远程数据库,两个数据库中的表是相同的,我想使用 PHP 将记录从旧数据库复制到新数据库

虽然这是将新记录从一个数据库复制到另一个数据库的最佳方法,但解决方案为

mysqli_query($db1,"SELECT field1,field2,field3 FROM table1");

mysqli_query($db2,"INSERT INTO table1 (field1,field2,field3)");

由于涉及的字段数量,我想尽量避免命名所有字段

我在想这样的事情...

$m = mysqli_query($db1,"SELECT * FROM table1");

****这就是我卡住的地方****

我如何从上述声明中得到这个?

$values = "'".implode("','",array_values($m))."'"; 
$columns = implode(",",array_keys($m));

所以我可以做到这一点

mysqli_query($db2,"insert into table1 ($columns) values ($values)")

我知道我需要将 PRIMARY KEY id 更改为 null。

4

2 回答 2

3

要获取实际的列名,您可以这样做:

$sql="SELECT column_name FROM information_schema.columns WHERE table_schema = 'database_name' AND table_name = table1";

将上述内容提取到数组中。

$result = $mysqli->query($query);
$cols = $result->fetch_array(MYSQLI_NUM);

并将逗号分隔的列表创建到 $columns-variable

$columns = implode(",", $cols);

对于值,只需执行常规选择语句:

$sql="SELECT * FROM table1";
$result = $mysqli->query($query);
$vals = $result->fetch_array(MYSQLI_NUM);
于 2013-04-29T10:08:51.523 回答
2

最后,修改我自己的代码并使用 mysqli_fetch_assoc 创建数组非常简单

$m = mysqli_fetch_assoc(mysqli_query($db1,"SELECT * FROM table1"));

然后使 id 为空

$m["id"] = 'replacethis';
$values = str_replace("'replacethis'","null","'".implode("','",array_values($m))."'"); 

$columns = implode(",",array_keys($m));

然后最后...

mysqli_query($db2,"insert into table1 ($columns) values ($values)");
于 2013-04-29T12:09:08.823 回答