1

[以下に更新]

BitnamiLAMPスタックを使用して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)

このユーザー名とパスワードの組み合わせは間違いなく存在し、(私が知る限り)問題のデータベースにアクセスできます。何が間違っているのか、なぜ元のスクリプトでエラーが発生しない(または接続する)のか疑問に思っています。

アップデート:

私は以下のマイケルの提案に従い、接続することができました。問題を再現したかったので、そのユーザーを削除してから、

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

2つのこと:

  1. 共有ホスティング プロバイダーの MySQL ホスト パスを使用していることを確認してください。GoDaddy の場合は、DBNAME.db.123456.hostedresource.com のようなものです。それはあなたのものとは違うでしょう。localhost はおそらくそうではありません。
  2. 接続に使用している php ファイル (DB 資格情報を入力する場所) が webroot の外にあることを確認してください。このファイルを Web ルート ディレクトリ内またはそれ以下に配置すると、これは大きなセキュリティ リスクになります。何らかの理由でサーバー上で PHP がクラッシュした場合、ファイルはブラウザに出力され、誰でも見ることができます。
于 2012-01-26T21:03:07.957 に答える
0

試す

ユーザー名: 「ルート」

password: '' (パスワードなし)

于 2012-01-26T22:59:22.253 に答える