【发布时间】:2016-03-24 07:45:12
【问题描述】:
我正在实施一个数据库表复制系统。我知道后一种 MySQL 技术,但我无法让它工作。我现在所拥有的基本上是一个初步的实现。
这是我到目前为止的代码。
//This is where DBHandler is defined
$documentRoot=$_SERVER['DOCUMENT_ROOT'];
require_once($documentRoot."/Classes/DBHandler.php");
$src_controller = new DBHandler();
$query = "SELECT * FROM table";
$temp = $src_controller->select($query);
//Convert temporary database contents into usable result
while($rowObject=mysql_fetch_object($temp)){
$result[]=$rowObject;
}
//Create database handler to handle database
$dest_controller = new mysqli("ip address", "user", "password", "database name");
if($mysqli->connect_errno){
$errorMessage = sprintf("'%s'", $mysqli->connect_error);
echo $errorMessage;
}
else{
$dest_controller->query("DELETE * FROM table");
//Processing of data goes here
foreach($result as $item){
//Create query to insert individual records
$start = "INSERT INTO table(field1, field2...) VALUES (";
$end = sprintf("'%s', %d, %d, %f, %f)", field1, field2...);
$start .= $end;
//Database handler uses $start to insert record
$dest_controller->query($start);
}
$dest_controller->close();
}
正在读取的数据库与正在写入的数据库位于不同的服务器上。我尝试使用命令“SHOW VARIABLES WHERE Variable_name = 'hostname'”检查目标数据库的主机,并最终得到一个仅提供“抱歉,错误页面或我们已移动”页面的站点。更重要的是,我在 URL 中看到的端口号与“SHOW VARIABLES WHERE Variable_name = 'port'”命令给我的不匹配。后一个命令说 3306。
我不确定该怎么做。我们使用 cPanel X 连接到数据库,并且有一个选项允许选择 IP 远程访问该数据库。我很肯定我授予了对正确地址的访问权限,但这没有取得任何成果。
这是主机的某种问题,还是我在创建 mysqli 对象时没有使用正确的 IP 地址进行连接?
【问题讨论】:
-
只是检查;但是您想在
new mysqli()部分中使用您的MYSQL 服务器的IP 地址,而不是您的PHP 服务器的地址。 -
我确实使用了 MySQL 服务器地址。我测试了这个东西,“目标正在积极拒绝连接”消息是第一个结果。接下来的一切都是与此相关的错误,但我可以看到 PHP 是正确的。我在另一个没有问题的文件中使用了相同的代码,但后者只是本地写入和删除。
-
如果您已设置 cPanel 允许在“数据库”选项卡中使用“远程 MySQL”进行远程 IP 访问,那么下一步将检查
WHM设置(CPanel 的父程序),如果你可以访问吗?但我没有任何更直接的建议。 3306 是 MySQL 的标准端口 -
另一个明显的问题,但您是否检查过您以
new mysqli()登录的用户是否存在于 MySQL 服务器上? -
是的。我们有两个站点,一个用于公众,另一个用于与管理相关的操作。在公共站点上,有一个类已经将连接信息插入到它创建的用于处理所有内容的 mysqli 对象中。我复制了该脚本的所有信息,因此没有理由不正确。