2016-08-06 21 views
1

AWSでMySQL RDSインスタンスを設定しました。インスタンスをインスタンス化した後、EC2のコマンドラインから接続しようとしましたが、問題なく動作します。しかし、私のPHPコードを介して接続しようとすると、私はerrosを取得します。以下は、私の接続性をテストしようとしたサンプルコードです。PDSを使用してAWS RDSに接続できません

<?php 
try{ 
    $dbh = new pdo('aws-test-db.hibizibi.us-west-2.rds.amazonaws.com;dbname=test', 
        'root', 
        'password', 
        array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 
    die(json_encode(array('outcome' => true))); 
} 
catch(PDOException $ex){ 
    die(json_encode(array('outcome' => false, 'message' => 'Unable to connect'))); 
} 

{"outcome":false,"message":"Unable to connect"}が得られます。私の元のコードはidiorm(PDOを使用)を使用しています。データベースに接続する部分は、以下のようになります。

# configure ORM 
ORM::configure('mysql:host='.DB_SERVER.';dbname='.DB_NAME); 
ORM::configure('username', DB_SERVER_USERNAME); 
ORM::configure('password', DB_SERVER_PASSWORD); 

私は以下のエラートレースを取得の上から:

SQLSTATE[HY000] [2005] Unknown MySQL server host 'aws-test-db.hibizibi.us-west-2.rds.amazonaws.com:3306' (11) 
#0 /var/www/html/main/admin/applications/vendors/idiorm/idiorm.php(255): PDO->__construct('mysql:host=aws-...', 'root', 'password', NULL) 
#1 /var/www/html/main/admin/applications/vendors/idiorm/idiorm.php(237): ORM::_setup_db('default') 

UPDATE

を私が使用して接続しようとする私のテストコードを更新しますmysqlの拡張機能で、mysqlで動作しますが、PDOでは動作しませんでした。

<?php 

$servername = "aws-test-db.hizibizi.us-west-2.rds.amazonaws.com"; 
$username = "root"; 
$password = "password"; 
$dbname='test'; 


try{ 
    $dbh = new pdo(
     'mysql:'.$servername.';dbname='.$dbname.';', 
     $username, 
     $password, 
     array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) 
    ); 

    die(json_encode(array('outcome' => true))); 
} catch(PDOException $ex) { 
    echo json_encode(array('outcome' => false, 'message' => $ex->getMessage()))."\n"; 
} 

// Create connection 
$conn = mysqli_connect($servername, $username, $password); 

// Check connection 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 
echo "Connected successfully\n"; 

今、私は{"outcome":false,"message":"SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '\/var\/lib\/mysql\/mysql.sock' (2)"}を取得していますが、PDOに接続しようとしています。 mysqlによる私の試みは成功しています。問題は特にPDOにあるようです。私がチェックできるものはありますか?

+0

ありがとうございます$ dbport = $ _SERVER ['RDS_PORT']; PHPコードですか? – error2007s

+0

はデフォルトで3306を試してはいけませんか? –

+0

aws-test-db.hibizibi.us-west-2.rds.amazonaws.com; dbname = test; port = 3306;を置き換えてみてください。あなたが接続できるかどうかを確認してください。 – error2007s

答えて

2

これは非常に古い質問ですが、私はまったく同じ問題を抱えており、これを後で見つけた人のためにここに文書化したいと思います。

手動でコマンドラインからデータベース(アマゾンRDS)に接続することができ

  1. 問題。
  2. PHPでmysqliを使用してデータベースに接続することができます。
  3. はPHPでPDO経由でデータベースに接続できません。私にとって

ソリューション

、ほとんどすべてを試した後、私はランダムに試してみて、新しいデータベース・ユーザーを作成することを決めました。これはうまくいきました。私は今PDO経由で接続することができました。

私はこの問題をもう少し詳しく調べるように促しました。問題をMySQLパスワードのバックスラッシュ\文字に絞り込むことができました。

ENV Vars(\)とPHPとPDOの間に何らかの種類の競合があるようです。

関連する問題