我已经尝试通过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权限两个)
- 检查是否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给出连接错误信息
编辑:
基于对Question的编辑,请创建一个带有密码的用户,并传递该密码,而不是一个空字符串。
不要以root帐户连接,因为它是用于维护的管理员帐户。使用root会使您面临脚本组成和凭证被盗的风险(如果是内置的,而不是在vault
中),从而允许黑客访问您的所有数据库。
错误:
[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO)
可能是my.cnf
文件和bind-address
设置的问题。我得看看。
我的建议是创建一个非根用户'jimmy987'@'%'
,并执行
SET PASSWORD FOR 'jimmy987'@'%'=PASSWORD('');
查看是否对该用户有效,然后删除该用户。请注意,如果成功,错误消息将更改,可能会提示没有使用数据库的权利。因为没有执行授予。
基于似乎暗示服务器期望一个空密码的文章。
那么我们需要解决为什么。
除此之外,我将不得不做一个TeamViewer会话来看看发生了什么(因为我当然看不到你真正在运行什么)。我很想知道答案,当你解决它
既然你没有提到确切的错误,恐怕我们大多数人都很难猜出来。试试这个来改变一下?
<?php
$db_host = "localhost";
$db_user = "root";
$db_pass = "";
$db_name = "asdf";
try
{
$db_con = new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass);
$db_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
$e->getMessage();
}
?>