几个小时以来,我一直在尝试通过 PHP 连接到我的数据库,但没有成功。我的 PHP 代码如下所示:
<?php
ini_set('display_errors', 'On');
$hostname = 'localhost';
$username = 'root';
$password = '';
function testdb_connect($hostname, $username, $password) {
$db = new PDO("mysql:host=$hostname;dbname=asdf", $username, $password);
return $db;
}
try {
$db = testdb_connect($hostname, $username, $password);
echo 'Connected to database';
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
我已经尝试过的:
- 检查 'root' 是否配置为 'localhost' (Y)
- 检查 root@localhost 是否有 Grant_priv/Super_priv 权限(Y 对于两者)
- 检查 Apache/MySQL 是否正在运行(两者都是 Y)检查我的 PHP 是否运行
- 代码错误,即我遗漏了一些东西 (N)
对问题可能出在哪里有任何想法吗?提前致谢!
编辑:
不好意思,今天经常看到这个错误信息,忘记在这里说了:
SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO)
重新编辑:
这是我创建的用户的 php 代码:
<?php
ini_set('display_errors', 'On');
$hostname = 'localhost';
$username = 'myUserName';
$password = 'thatUserPassword';
function testdb_connect($hostname, $username, $password) {
$db = new PDO("mysql:host=$hostname;dbname=asdf", $username, $password);
return $db;
}
try {
$db = testdb_connect($hostname, $username, $password);
echo 'Connected to database';
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
错误信息:
SQLSTATE[HY000] [1045] Access denied for user 'myUserName'@'localhost' (using password: YES)
最佳答案
假设我这样做:
一个
<?php
$db = new PDO('mysql:host=localhostaaa;dbname=so_gibberish;charset=utf8', 'myUser', 'myPassword');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "I am right here<br/>";
?>
然后在出错时,我得到一个白屏。
假设我这样做:
B
<?php
try {
$db = new PDO('mysql:host=localhostxxxx;dbname=so_gibberish;charset=utf8', 'fred', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
exit();
}
echo "You are connected<br/>";
?>
然后B给我连接错误信息
编辑:
基于对问题的编辑,请创建一个带密码的用户,并传递该密码,而不是空字符串。
重要的是不要以 root 身份连接,因为它是用于维护的管理员帐户。使用 root 会使您面临包含脚本和凭证被盗的风险(如果是内置的而不是在 vault
中),从而允许黑客访问您的所有数据库。
错误:
[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO)
可能是 my.cnf
文件和 bind-address
设置有问题。需要看到这一点。
我的建议是创建一个非根用户 'jimmy987'@'%'
,然后执行一个
SET PASSWORD FOR 'jimmy987'@'%'=PASSWORD('');
查看它是否适用于该用户,然后删除该用户。请注意,如果成功,错误消息将发生变化,可能会咆哮说没有使用数据库的权利。因为 Grants 没有执行。
基于似乎暗示服务器需要空白密码的文章。
然后我们需要解决原因。
除此之外,我还必须执行 TeamViewer session 以查看发生了什么(因为我当然看不到您真正运行的是什么)。当您修复它时,我很想知道答案。
关于php - root@localhost 无法通过 PHP (PDO) 连接到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553314/