最初,我尝试仅使用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/