Php 与本地MySQL服务器的网站连接

Php 与本地MySQL服务器的网站连接,php,mysql,windows,Php,Mysql,Windows,我最近在我的Windows家用电脑上配置了MySQL服务器。此外,我还使用0fees.net创建了一个网站,这是一个免费的托管提供商,它附带一个vista面板,提供各种服务,包括PHP支持、FTP文件托管、自己的MySQL服务器等 对于该网站,我创建了一个“登录”PHP脚本,以便人们登录到我的网页。但是,我希望PHP登录脚本直接从我在家用计算机上配置的MySQL服务器读取,而不是从0fees.net上的cPanel上提供给我的MySQL数据库读取。为此,我采取了几个步骤: 1) 使用MySQL服

我最近在我的Windows家用电脑上配置了MySQL服务器。此外,我还使用0fees.net创建了一个网站,这是一个免费的托管提供商,它附带一个vista面板,提供各种服务,包括PHP支持、FTP文件托管、自己的MySQL服务器等

对于该网站,我创建了一个“登录”PHP脚本,以便人们登录到我的网页。但是,我希望PHP登录脚本直接从我在家用计算机上配置的MySQL服务器读取,而不是从0fees.net上的cPanel上提供给我的MySQL数据库读取。为此,我采取了几个步骤:

1) 使用MySQL服务器实例配置向导配置MySQL

在该配置中,我在端口3306上启用了TCP/IP网络(并为该端口启用了防火墙例外),并启用了远程机器的根访问

2) 在MySQL命令行客户端上,我已通过以下方式向其他单元授予远程访问功能:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
3) 我已将端口3306转发到我的路由器(并使用各种端口检查器确认它已打开)

4) 我已经创建了名为“login.php”的登录脚本,它位于我的网站的.htdocs目录中,并在我的网站主页上处理HTML登录表单。它试图(但失败)连接到我的本地MySQL服务器。该php脚本感兴趣的部分是:

    $host="my_external_ip:3306"; // External IP of my computer and port to listen on
    $username="root"; // Username specified in the GRANT command-line-client command
    $password="password"; // Password specified in the GRANT command-line-client command
    $db_name="logon"; // MySQL database name
    $tbl_name="accounts"; // Table name within the database

    // Connect to server and select databse.
    mysql_connect("$host", "$username", "$password")or die(mysql_error());
    mysql_select_db("$db_name")or die("cannot select DB");
在尝试连接MySQL服务器时,我收到一条错误消息,指出:

Can't connect to MySQL server on 'my_external_ip' (4).
还应注意的是,我能够在端口3306上使用相同的外部IP地址,从其他internet网络(使用Navicat测试)上的其他机器远程连接到本地MySQL服务器。关于为什么我的网站也无法连接,有什么想法吗


提前感谢您提供的任何见解。

因为我可以确定您的服务器正在运行(并且通常可以从Internet上看到),所以有几种可能性:

  • 您忘记运行
    刷新权限
  • 您的用户名或密码错误
  • 您的免费主机提供商正在阻止连接

  • 我的钱在#3上,有很多激励措施可以这样做。

    @Chris提到您的提供商可能会阻止3306端口上的出站请求。这里有一个快速的方法来检查情况是否如此,并绕开它:

  • 将路由器配置为从路由器上的端口80向前端口到机箱上的端口3306。这将允许您从网络外部通过端口80而不是端口3306连接到MySQL

  • 将PHP代码更改为在端口80而不是3306上连接到IP


  • 您的主机提供商可能会阻止出站端口3306,但几乎肯定不会阻止出站端口80请求(许多人使用CURL或web服务等)。

    好吧,我将告诉您我学到的一个小技巧,您所要做的就是进入
    wamp>mysql>my.ini
    并将所有
    3306
    替换为
    3305
    ,然后保存并将其应用于防火墙并向前端口
    3305
    。然后,当您远程连接时,只需执行以下操作

    mysql_connect("ip adress:3305", "username", "password");
    

    我已经对此进行了测试,它可以正常工作,因为web托管站点会阻止来自端口3306的传入流量。

    我可以告诉你,你的端口肯定是开放的,并且正在侦听(这样发布你的IP是个坏主意)。此外,为来自php的连接创建一个不同于root的用户也是一个很好的做法。。。你应该为你的php连接创建一个具有受限权限的新用户。你的站点和本地站点之间是否有代理?#3正是我所想的。谢谢,现在我正在使用一个免费的网站托管服务。但是,如果升级,我可以使用访问主机功能来启用远程连接。这样行吗?(假设这就是原因)@user797967:你的猜测和我的一样好(可能更好)。我对那个主机提供商一无所知。从托管的角度来看,最好让您的客户使用您的数据库,因为这样您就可以为每增加一个数据库向他们收取费用(另外还有整个安全方面)。@Eric Petroleje感谢您的见解,但我不确定我是否完全理解第1步。@user-您提到您有“已将端口3306转发到我的路由器(并已使用各种端口检查器确认它已打开)”。这是您需要更改的步骤。在路由器的端口转发设置中,您需要指定端口80上的连接应转发到MySQL框上的端口3306(不是转发3306->3306,而是转发80->3306).希望能把事情弄清楚bit@EricPetroleje-是的,非常感谢,我马上就来试试now@EricPetroleje-抱歉,我不知道如何在路由器配置中将端口80上的连接重定向到端口3306。@用户-如果无法从一个端口转发到另一个端口(并非所有路由器都支持)您可以将mysql修改为在端口80而不是3306上运行,然后将路由器设置为转发端口80。请注意,端口80通常用于web服务器,因此如果您的机箱上运行IIS或Apache,mysql将无法在端口80上启动。