我正在尝试通过此脚本连接到外部数据库:
$dsn = 'mysql:host=xxx.xxx.xxx.xxx;dbname=dbname';
$user = 'user';
$password = 'pass';
try {
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
die();
}
关于数据(主机,用户名,数据库和密码)一切都是正确的,因为当我在浏览器上提示xxx.xxx.xxx.xxx/phpmyadmin并输入用户名和密码时,让我进入具有权限的数据库创建,删除等。 但是当我尝试通过PDO连接时,它给了我“连接失败:SQLSTATE [28000] [1045] Acess拒绝...”
PHPMYADMIN面板上显示的信息如下: MySQL的 服务器:通过UNIX套接字的Localhost 服务器版本:5.5.20 协议版本:10 用户:user @ localhost MySQL字符集:UTF-8 Unicode(utf8)
Web服务器 阿帕奇 MySQL客户端版本:5.5.20 PHP扩展:mysqli
由于“PHP扩展:mysqli”属性,我是否有可能被迫使用mysqli? 在此先感谢!!!
答案 0 :(得分:0)
您的代码似乎没有错,除了setAttribute
方法设置错误输出以引发警告..但您在try/catch
块中..所以您可能要考虑使用{{ 1}}。
其次,检查您的用户名/密码的远程权限。该用户帐户可能存在IP限制。您可以对用户帐户的PDO::ERRMODE_EXCEPTION
使用通配符%
,或者(建议)提供连接到数据库的服务器IP。
答案 1 :(得分:0)
我猜想phpmyadmin工作正常,因为phpmyadmin在你尝试连接的主机上。我的猜测是服务器或用户帐户被配置为只能通过127.0.0.1/localhost访问 - 您可以为您尝试连接的用户提供另一条记录,并为该用户提供通配符或特定主机。根据您在此处提供的信息,您似乎只需要设置MySQL即可接受来自其他主机的连接。
答案 2 :(得分:-1)
与此同时,我试图在本地运行该应用程序,但它似乎也无法连接,所以在识别上述问题时,这可能会有所帮助。 这次(在localhost中),错误是: 连接失败:SQLSTATE [HY000] [1045]访问被拒绝用户'xxxxxxx_xxxxxxx'@'localhost'(使用密码:是)
我在自己的phpmyadmin上创建了用户,授予他对这个数据库的所有权限,所以我无法理解为什么即使在localhost我也无法连接到它。它可能与上面的问题有关,还是应该在不同的主题上完全不同?谢谢!