PHP拒绝MySQL访问,CLI将连接


MySQL access denied in PHP, CLI will connect

起初我尝试在PHP中连接PDO。但是,我收到了拒绝访问的消息。我可以使用完全相同的命令连接到命令行界面,但是php从PDO给出了这个错误:

致命错误:未捕获的异常'PDOException'与消息'SQLSTATE[HY000][1045]访问被拒绝用户'avt_root'@'localhost'(使用密码:YES)'在C:'inetpub'wwwroot'index.php:3堆栈跟踪:#0 C:'inetpub'wwwroot'index.php(3): PDO->__construct('mysql:host=loca…', 'avt_root', '[**]') #1 {main}抛出C:'inetpub'wwwroot'index.php在第3行

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

所以接下来我试着连接mysql_connect来解决可能有PDO参数不正确的问题:

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

然而,即使这样也会给出几乎相同的错误:

警告:mysql_connect():访问拒绝用户'avt'@'localhost'(使用密码:YES)在C:'inetpub'wwwroot'index.php第2行

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

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

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

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

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

我最终放弃了这种做法,并完全重新安装了MySQL,我只是打算使用root帐户,因为我们有足够高的安全性,我不必太担心有人搞乱一个只有内部网的站点。