1

[以下更新]

我在使用 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

4 回答 4

2

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

GRANT ALL PRIVILEGES on dbname.* to username@localhost IDENTIFIED BY 'thepassword';
于 2012-01-26T20:58:09.390 回答
0

试试看,如果您的用户没有密码:

$link = mysql_connect('localhost', 'username');
于 2012-01-26T20:58:02.740 回答
0

两件事情:

  1. 确保您使用的共享主机提供商 MySQL 主机路径应该是什么。我知道 GoDaddy,它类似于 DBNAME.db.123456.hostedresource.com。我敢肯定,这对你来说会有所不同。localhost 可能不是它。
  2. 确保您用于连接的任何 php 文件(您在其中键入数据库凭据)都在 webroot 之外。如果您将此文件放在您的 Web 根目录或以下目录中,这是一个很大的安全风险。如果 PHP 由于某种原因在服务器上崩溃,该文件将被呈现给浏览器以供任何人查看。
于 2012-01-26T21:03:07.957 回答
0

尝试

用户名:'root'

密码:''(即没有密码)

于 2012-01-26T22:59:22.253 回答