我试图在两个不同的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);
?>
Run Code Online (Sandbox Code Playgroud)
那条线:
$sql = "CREATE TABLE $row[0] SELECT * FROM $db2.$dbmaster.$row[0] ";
Run Code Online (Sandbox Code Playgroud)
只是不起作用.$ db2不会让它转到其他服务器并选择.
从做了一些关于SO的阅读我发现有人类似,有人说它无法完成并查看联合表,这对我不起作用.
如果上面不能做到这一点有没有人知道我正在做的事情的方法?我正在删除副本上的表并根据主服务器中的表重新创建它们.然后我选择master中的数据放入重新创建的表中.谢谢
更新:就这样我可以清楚.如果所有内容都在同一台服务器上并且我只有一个数据库连接,则代码可以工作.我相信是因为创建表选择我有问题.此SQL需要同时使用两个服务器.create table用于一个刚刚删除它的表的数据库,但select是从第二个连接的数据库中选择的 - 同一个SQL语句中的两个连接.
是的,在您的PHP脚本上,您可以在您具有访问权限和权限的所有不同服务器上执行所需的所有查询.
您没有指定数据库$sql.您在运行该mysql_query功能时指定它.
所以,你的代码:
$sql = "SHOW TABLES FROM $dbname";
$result = mysql_query($sql, $db1);
Run Code Online (Sandbox Code Playgroud)
是错的.它应该只是:
$sql = "SHOW TABLES";
$result = mysql_query($sql, $db1);
Run Code Online (Sandbox Code Playgroud)
通过$db1在第二个参数上使用,mysql_query您已经指定要仅显示该数据库中的表.
按照其他句子的相同推理,你应该能够得到你想要的结果.
你将无法做到这一点:
$sql = "CREATE TABLE $row[0] SELECT * FROM $db2.$dbmaster.$row[0] ";
Run Code Online (Sandbox Code Playgroud)
如果要将行插入$db2到新创建的表中$db1,则需要:
$db2以获取结果$db1$db2结果$db1只用一句话就没有神奇的方法.