什么阻止PHP连接到我的MySQL数据库?

时间:2012-01-26 20:54:24

标签: php mysql bitnami

[更新如下]

我在使用Bitnami LAMP堆栈连接到MySQL数据库时遇到问题。这是我在最初托管数据库的共享托管服务器上连接的代码:

DEFINE ('DB_USER', 'username');
DEFINE ('DB_PASSWORD', 'password');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'database');

if ($dbc = mysql_connect (DB_HOST, DB_USER, DB_PASSWORD)) { // Make the connnection.

    if (!mysql_select_db (DB_NAME)) { // If it can't select the database.

        // Handle the error.
        trigger_error("Could not select the database!\n<br />MySQL Error: " . mysql_error());

        exit();

    } // End of mysql_select_db IF.

} else { // If it couldn't connect to MySQL.

    trigger_error("Could not connect to MySQL!\n<br />MySQL Error: " . mysql_error());
    exit();

} // End of $dbc IF.

在我的Bitnami服务器上运行它,我得不到任何响应(甚至没有错误消息)。 (PHP工作正常。)

然后我尝试了

<?php
$link = mysql_connect('localhost', 'username', 'password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>

得到了

Could not connect: Access denied for user 'username'@'localhost' (using password: YES)

此用户名/密码组合肯定存在且(据我所知)可以访问相关数据库。我想知道我做错了什么以及为什么原始脚本不会产生错误(或连接)。

更新

我遵循迈克尔的建议,并且能够连接。我想重现这个问题,所以我删除了该用户,然后通过

创建了一个用户testuser
CREATE USER 'testuser'@'%' IDENTIFIED BY  '***';

GRANT SELECT , 
INSERT ,

UPDATE ,
DELETE ,
FILE ON * . * TO  'testuser'@'%' IDENTIFIED BY  '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

然后按照迈克尔的建议,我执行了

GRANT ALL PRIVILEGES ON test . * TO testuser@localhost IDENTIFIED BY  'password'

但我又来了

Could not connect: Access denied for user 'testuser'@'localhost' (using password: YES)

(无论我使用'%'还是'localhost',这都不起作用)

这是phpmyadmin

中testuser的权限
Database    Privileges  Grant   Table-specific privileges
test     ALL PRIVILEGES No  No   Edit Privileges

4 个答案:

答案 0 :(得分:2)

收到的错误消息很明确 - 您正在连接的用户无法通过您正在使用的密码进行访问。您需要相应地授予权限:

GRANT ALL PRIVILEGES on dbname.* to username@localhost IDENTIFIED BY 'thepassword';

答案 1 :(得分:0)

如果您的用户没有密码,请尝试使用

$link = mysql_connect('localhost', 'username');

答案 2 :(得分:0)

两件事:

  1. 确保您使用的是共享托管服务提供商MySQL主机路径。我知道GoDaddy,它就像DBNAME.db.123456.hostedresource.com。我相信你的情况会有所不同。 localhost可能不是它。
  2. 确保您用于连接的任何php文件(您输入数据库凭据的位置)都在webroot的外部。如果将此文件放在Web根目录或更低版本中,则存在很大的安全风险。如果PHP由于某种原因在服务器上崩溃,该文件将呈现给浏览器供任何人查看。

答案 3 :(得分:0)

尝试

用户名:&#39; root&#39;

密码:&#39;&#39; (即没有密码)