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