2

The Error: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'tech'@'localhost' (using password: YES)' in .......

コマンドラインでリモート接続できますが、php を使用していません。どこを見ればよいでしょうか?

詳細は次のとおりです。

Web サーバー A: 1.1.1.1 は、php スクリプトを保持します。

$REGIS_DB_SERVER = "2.2.2.2"; //I've tried the IP as well as "pretendhostname.com"
$REGIS_DB_NAME = "db_name";
$REGIS_DB_USER = "tech"; // or any other user name
$REGIS_DB_PASSWORD = "password";

//connect to db
$db = new PDO("mysql:host = $REGIS_DB_SERVER; dbname=$REGIS_DB_NAME; charset=utf8", $REGIS_DB_USER, $REGIS_DB_PASSWORD);
print_r($db -> errorInfo());
echo "Connected<br>";

$sql = "CREATE TABLE Test(PersonID int,LastName varchar(255),FirstName varchar(255),Address varcha(255),City varchar(255))";
$result = $db->query($sql);

echo "$result <br>";

?>

Web サーバー B: 2.2.2.2 は mySQL データベースを保持します: Ubuntu 11.04 を実行しています

/etc/mysql/my.cnf で

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#Commented out to allow remote connections to this database
#bind-address           = 216.70.81.240

私は実行mysql> select Host,User from user;して取得します:

+-----------------------+------------------+
| Host                  | User             |
+-----------------------+------------------+
| %                     | root             |
| 127.0.0.1             | root             |
| 1.1.1.1               | tech             |
| localhost             | debian-sys-maint |
| localhost             | root             |
| localhost             | tech             |
+-----------------------+------------------+

ubuntu 12.04 でポート 3306 を開き、任意の IP から mysql への接続を許可することは、iptable の問題ではないことを意味し、接続をテストします。

Webserver A 1.1.1.1 に ssh 接続し、次のコマンドを実行しました。

mysql -u tech -p -h 2.2.2.2
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 200672
Server version: 5.1.63-0ubuntu0.11.04.1 (Ubuntu)
4

3 に答える 3

1

発見した後: PDO はリモート mysql サーバー に接続できません ホストが「理解されていない」場合、PDO 接続はデフォルトで host=localhost になることに気付きました。よく見ると、割り当ての間に 2 つのスペースがあることに気付きました。構文でスペースが重要であることに気づきませんでした。

結局、それは構文エラーでした:

実用的な解決策(スペースを削除することによる):

$db = new PDO("mysql:host=$REGIS_DB_SERVER; dbname=$REGIS_DB_NAME; charset=utf8", $REGIS_DB_USER, $REGIS_DB_PASSWORD);
于 2013-09-26T22:32:59.607 に答える
0

これは間違いなくデータベースのパーミッション/権限の問題です。GRANT privilegesローカル サーバーがデータベースにアクセスできるように、dba/sysad に依頼してください。

于 2013-09-25T18:51:14.617 に答える