使用php跨服务器的mysqli连接错误

Posted

技术标签:

【中文标题】使用php跨服务器的mysqli连接错误【英文标题】:mysqli connection error across servers using php 【发布时间】:2014-01-11 16:58:47 【问题描述】:

我正在尝试使用 php 连接连接到另一台服务器上的 mysql 数据库。我收到以下错误,无法弄清楚。

这是我包含端口时的错误:

警告:mysqli_connect() [function.mysqli-connect]: (HY000/2005): 未知的 MySQL 服务器主机 'xxxxxx.db.0000095.hostedresource.com:3306' (25) 在 /home/xxxxxx/public_html/tools/include/db_connect.php 上线 3 连接MySQL失败:未知的MySQL服务器主机 'xxxxxxxx.db.0000095.hostedresource.com:3306' (25)


这是我不使用端口时的错误:

警告:mysqli_connect() [function.mysqli-connect]: (HY000/2003): 未知的 MySQL 服务器主机 'xxxxxx.db.0000095.hostedresource.com' (110) 在 /home/xxxxxx/public_html/tools/include/db_connect.php 上线 3 连接MySQL失败:未知的MySQL服务器主机 'xxxxxxxx.db.0000095.hostedresource.com' (110)


这是我的 db_connect 文件:
<?
$con=mysqli_connect("xxxxxx.db.0000095.hostedresource.com","xxcorrectxx","xxcorrectxx",
"xxcorrectxx");

if (mysqli_connect_errno())

  echo "Failed to connect to MySQL: " . mysqli_connect_error();

?>


这是我拥有包含文件的服务器上可能存在的防火墙问题吗? 这个 db 连接文件在我拥有的其他域上运行良好。 请告诉我您是否可以找到解决此问题的方法。谢谢你。

【问题讨论】:

我认为你的 MySQL 主机中的 xxxxxx 部分需要替换为实际值。 你连接的web服务器from是否有权限连接到目标sql数据库服务器?您是否为主机创建了带有% 的数据库用户? @AmalMurali GoDaddy 共享主机会删除敏感/已解析的主机名/用户信息。 xxxxxx 只是我用来屏蔽我的实际数据库名称的值。我那里有正确的信息。 Lathesan,不确定您的意思。我在一个站点上使用这个完全相同的代码,一切都很好。我没有更改 mysql 服务器所在站点的权限。当我将文件放在另一台主机上时,它没有连接。 【参考方案1】:

流量可能被防火墙阻止了。

通常 MySQL 端口不向公众开放;它仅适用于本地网络。此外,DB 用户可能在 MySQL 用户权限表中拥有localhost 或 IP,而不是任何主机 (%)。

您可以通过 telnet 到远程服务器的 3306 端口进行验证。

【讨论】:

我在尝试通过 Navicat 连接到 3306 时遇到了这个问题。那时我正在运行 cPanel 界面,所以我有一个 GUI 可以遵循,这很有效。 +1【参考方案2】:

根据documentation of mysqli_connect(),端口是一个附加参数。

$con=mysqli_connect("xxxxxx.db.0000095.hostedresource.com",
  "xxcorrectxx","xxcorrectxx", "xxcorrectxx", 3306);

【讨论】:

可选参数,3306 being mysql default. 我正要补充一点,这不应该是必要的,因为 3306 是默认端口。

以上是关于使用php跨服务器的mysqli连接错误的主要内容,如果未能解决你的问题,请参考以下文章

Gingerbread 浏览器跨域响应连接错误

PHP Mysql 跨数据库连接

服务器端PHP允许跨域

PHP - 如何实现跨域

PHP 5 MySQLi 函数总结

13-1 在PHP中使用mysqli与MySQL交互