【发布时间】:2010-10-22 14:19:15
【问题描述】:
我正在尝试在两个不同的 MySQL 服务器之间使用 PHP 和 MySQL 的 Create Table Select。我不确定这可以用 SQL 来完成。我没有收到任何错误,但我什么也没做:
<?php
$dbname = 'cms';
$dbmaster = 'cmsms';
$db1 = mysql_connect('localhost', 'root', 'secret');
if (!$db1) {
echo 'Could not connect to mysql';
exit;
}
$db2 = mysql_connect('server2', 'root', 'secret');
if (!$db2) {
echo 'Could not connect to mysql';
exit;
}
mysql_select_db("$dbname", $db1) or die ("Unable to select database");
mysql_select_db("$dbmaster", $db2) or die ("Unable to select database");
$sql = "SHOW TABLES FROM $dbname";
$result = mysql_query($sql, $db1);
if (!$result) {
echo "DB Error, could not list tables\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
while ($row = mysql_fetch_row($result)) {
$sql = "DROP TABLE `$row[0]`";
mysql_query($sql, $db1);
echo "Table rows: {$row[0]} Deleted <br/>";
$sql = "CREATE TABLE $row[0] SELECT * FROM $db2.$dbmaster.$row[0] ";
mysql_query($sql, $db1);
echo "Table: {$row[0]} created <br/>";
}
echo "<br/>done...";
mysql_free_result($result);
?>
那行:
$sql = "CREATE TABLE $row[0] SELECT * FROM $db2.$dbmaster.$row[0] ";
只是不起作用。 $db2 不会让它转到其他服务器并选择。
通过阅读 SO,我找到了类似的人,有人说无法完成并查看联合表,这对我不起作用。
如果上面无法做到这一点,是否有人知道我正在做的事情的方法?我将表放在副本上并根据主表中的表重新创建它们。然后我选择master中的数据放入重新创建的表中。谢谢
更新: 只是为了让我清楚。如果一切都在同一台服务器上并且我只有一个数据库连接,则该代码有效。正是由于create table select,我遇到了问题,我相信。此 SQL 需要同时使用两台服务器。创建表适用于刚刚删除表的一个数据库,但 select 是从第二个连接的数据库中选择的 - 同一 SQL 语句中的两个连接。
【问题讨论】:
-
@phill 如果我得到正确的答案,我会的。我尝试回去查看它们,但很多时候它们完全是错误的,或者我没有测试它们。
-
只是快速浏览一下您的一些较早的问题,我认为它们已经得到了解答,并提供了多种解决方案。请注意,我只查看了 PHP 问题,但对于您的大多数问题,您的大多数问题都有一个以上的答案以及可接受的解决方案。
-
@phill 这不是我的经验,但我很乐意检查他们是否给出了正确的答案。我不想保留任何人的观点并感谢所有答案。