无法从本地PHP脚本访问远程MySql Server

时间:2015-09-11 20:24:09

标签: php mysql

希望你有经验的人能清理我的挫败感!我搜索过&研究并发现多个来源讨论我正在尝试排除故障的类似问题,但似乎没有人帮助解决这个问题。如果没有给出我尝试过的整个历史列表,那么现在的情况就是:

  • 我有一个简单的Debian服务器设置了MySql数据库。已打开所有相关的防火墙端口,并且已对“用户名”@“mylocalglobalip”(用户名不是root用户)应用了特定的GRANT PRIVILEGES。
  • 在我的本地Apache实例上(我目前在OS X上运行它),我安装了最新的PHP并正常工作。我已经通过访问localhost / website / phpinfo.php证实了这一点 - PHP本身运行正常。
  • 我已经完成了使用mysqli设置简单MySql连接的所有教程。这是我的简单代码(删除了凭据):

    $connection = mysqli_connect($mylocalglobalip,$username,$password,$dbname);

    无论我尝试过什么,我都会得到友好的

  

“mysqli_connect():( HY000 / 1045):拒绝用户访问   'username'@'mylocalglobalip'(使用密码:YES)“警告。

  • 如果我通过SSH连接到远程服务器,我可以从非root和root登录进入MySql控制台。但是,如果我使用,我只能登录...

    mysql -u username -p

    ...并在提示时提供我的密码。但是,如果我输入......

    mysql -u username -pPassword

    ......没有运气。我再次获得Access Denied。

  • 最后,为了确保防火墙上的所有内容都已打开,并且我的服务器和MySql可以远程访问,我安装了MySqlWorkbench的本地实例。我输入了相同的凭据,我可以毫无问题地登录到远程服务器。

为什么我可以通过Workbench登录,但不能通过我的本地PHP脚本登录?我需要在本地和/或远程配置文件中启用一个明显的参数吗?从我看过的php和mysql配置文件中,我看不到任何会阻止PHP连接的内容。

我很乐意根据您的要求提供配置和代码段!

感谢阅读!

2 个答案:

答案 0 :(得分:0)

感谢评论和回复,解决方案呈现出来。迈克尔(sqlbot)提到使用-p'你的密码'用单引号括起密码中的任何特殊字符。然后我突然意识到(作为一个PHP菜鸟),检查PHP代码中的$ password变量。果然我有一些效果:

$password = "some random pa$$word goes here";

糟糕。 PHP中双引号内的$字符表示字符串中的变量插入。这很可能被解释为:

"some random pa goes here" // Since $ is empty and $word isn't a declared variable!

在单引号之间放置带有$ special字符的密码解决了简单的PHP语法问题。

感谢您阻止我走上服务器重新配置的道路,并鼓励我更仔细地搜索我的PHP代码!

答案 1 :(得分:-1)

这是一个寻找漏洞,至少在某些情况下听起来像凭证是错误的。

检查mysql日志并验证它是否在您从命令行成功登录时以及从PHP执行此操作或从命令行失败时显示相同的用户。您有时可能会显示为'用户名'或者'用户名' @' localhost'或'用户名' @' fqdn'并基于此加以区别对待。

仔细检查以确保您没有在两个不同的地方输入不同的凭据。验证凭据是否正确导入您的php文件。