4

私は2つの異なるサーバー上にmysqlデータベースとphp/apacheを持っています:hostphp.domain.comとhostmysql.domain.comとしましょう。

mysqlサーバーで、特定のホスト「hostphp.domain.com」から「my_database」データベースに接続する権限を持つユーザー「my_user」を設定しました。

mysql_connectを使用して接続すると、正しく機能します。しかし、php PDOを介して実行すると、次のエラーが発生します。

SQLSTATE[42000] [1044] Access denied for user 'my_user'@'%' to database 'my_database'

いくつかのテストを行ったところ、問題は... @'%'であることがわかりました。「my_user」にはどのホストからも接続する権限がないため、mysqlはその接続を拒否しています。

また、間違ったパスワードでmysql_connectを使用して接続しようとしましたが、エラーが表示されました。次のようになります。

Could not connect: Access denied for user 'my_user'@'hostphp.domain.com' (using password: YES).

違いは..@'%'と...@'hostphp.domain.com'にあります。

それが私の質問です、なぜphp pdoはリモートホストに接続するときにホスト名を宣言しないのですか?(またはそれを間違ってやっている)。

私の英語に感謝し、申し訳ありません。

編集。いくつかのコード例、これは機能しません:

try {
    $pdo = new PDO(
        'mysql:host=hostmysql.domain.com;port=3306;dbname=my_database',
        'my_user',
        'my_pass'
    );
} catch (PDOException $e) {
    die($e->getMessage());
}

しかし、これは問題なく動作します:

$conn = mysql_connect('hostmysql.domain.com', 'my_user', 'my_pass');
if (!$conn) {
    die('Could not connect: ' . mysql_error());
} 
4

1 に答える 1

2

mysql_connectを使用してホストに正常に接続しましたが、データベースを選択しようとしなかったため、エラーは発生しませんでした。

ユーザーはおそらくデータベースにアクセスできません。

mysql_select_db( "my_database");を実行してみてください。ホストに接続した後、同じエラーが発生するはずです。

于 2012-10-24T11:46:41.557 に答える