最初,我尝试仅使用PHP与PDO连接。但是,我收到访问被拒绝的消息。我可以使用完全相同的命令来连接到命令行界面,但是php从PDO给出了此错误:


  致命错误:消息'SQLSTATE [HY000] [1045] C:\ inetpub \ wwwroot \ index.php:3中用户'avt_root'@'localhost'(使用密码:是)的访问拒绝,消息'SQLSTATE [HY000] [1045]跟踪:#0 C:\ inetpub \ wwwroot \ index.php(3):PDO-> __ construct('mysql:host = loca ...','avt_root','[**]')#1 {main}在第3行中抛出C:\ inetpub \ wwwroot \ index.php


$db = new PDO("mysql:host=localhost;dbname=AVT_TIME", "avt_root", "[**]");


因此,接下来我尝试仅使用mysql_connect连接进行故障排除,也许PDO参数不正确:

$mysql = mysql_connect("localhost", "avt", "[**]");


但是,即使这给了我几乎相同的错误:


  警告:mysql_connect():在第2行的C:\ inetpub \ wwwroot \ index.php中,对用户'avt'@'localhost'的访问被拒绝(使用密码:是)


服务器配置:
IIS7.0,PHP在fast_cgi下运行,MySQL安装了在php.ini文件中选择的正确扩展名。

感谢所有帮助,减去关于正确的用户名和密码的任何评论,我已经检查了avt_root和avt帐户,并对其进行了三重检查。两者的密码实际上是相同的,并且都可以通过CLI在远程桌面上登录。

最佳答案

localhost在mysql-land上可能有点古怪。 mysql_*()函数使用的标准mysql接口库在内部将localhost重新定义为本地unix域套接字连接。这纯粹是为了提高效率,因为unix套接字没有TCP套接字的开销。

PDO,可能正在使用mysqlnd,将不会有此问题。 localhost表示127.0.0.1,它将尝试使用TCP套接字。

确保您的avt帐户设置为avt@127.0.0.1以允许TCP连接。

关于php - PHP中拒绝MySQL访问,CLI将连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16617768/

10-14 09:42
查看更多