1

早上好,

我在本地 Windows 7 PC 上编写了下面的代码块并尝试运行它。不幸的是,我收到了:

Connect Error (1045) Access denied for user 'dbuser'@'myhost(using password: YES)

我已为此数据库模式授予 dbuser Insert、Select、Update 和 Execute 使用 localhost 和 % 的权限。我也可以从服务器上的命令行 mysql -u dbuser -p 。

这是代码块:

<?php
/* Set Variables */
$host="serveripaddress";
$db="dbname"; 
$username="dbuser";
$pass="pass";

/* Attempt to connect */
$mysqli=new mysqli($host,$username,$pass,$db);
if (mysqli_connect_error()){
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
echo 'Success... ' . $mysqli->host_info . "\n";

$mysqli->close();

}
?>

我很难理解上述代码块是否导致了我的错误,或者是否需要在服务器上执行某些操作。任何人都可以建议一些调查领域吗?

谢谢, 席德

4

2 回答 2

1

确保如果您GRANT在 MySQL 中使用主机名,MySQL 可以将该主机名正确解析为您连接的 IP。

例如,如果你这样做

GRANT blah ON *.* to user@somehost

你必须记住 MySQL 不会看到“somehost”,它会看到一个 IP 地址。它必须进行反向查找才能获得主机名,如果 IP 没有反向映射,或者映射到完全不同的东西,MySQL 将不会提供访问权限。

除非可以保证反向映射是稳定的,否则 MySQL 中的远程访问账户最好使用 IP 地址。

于 2010-08-20T17:19:31.340 回答
1
<?php
/* Set Variables */
$host="127.0.0.1:3306";
$db="dbname"; 
$username="dbuser";
$pass="pass";

/* Attempt to connect */
$mysqli=new mysqli($host,$username,$pass,$db);
if (mysqli_connect_error()){
    die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());    
}
else
{
echo 'Success... ' . $mysqli->host_info . "\n";
$mysqli->close();
}

?>

首先,为您的 if/else 语句添加这些大括号。其次,尝试对 IP 进行硬编码。我只是用一个 IP 设置为一个变量(没有工作)运行它,然后我对其进行硬编码,工作得很好。

于 2010-08-20T17:35:30.733 回答