2016-08-06 12 views
1

Ich habe eine MySQL RDS-Instanz in AWS eingerichtet. Nachdem ich die Instanz instanziiert habe, habe ich versucht, sie von der Befehlszeile meines EC2 zu verbinden, und es funktioniert ohne Problem. Wenn ich versuche, über meinen PHP-Code eine Verbindung herzustellen, bekomme ich einen Fehler. Unten ist der Beispielcode, den ich versuchte, meine Konnektivität zu testen.Verbindung mit AWS RDS über PDO nicht möglich

<?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'))); 
} 

Ich bekomme {"outcome":false,"message":"Unable to connect"}. Mein ursprünglicher Code verwendet idiorm (das PDO verwendet). Der Abschnitt, der mit Datenbank verbindet sieht aus wie folgt:

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

Aus der obigen ich die folgenden Fehler Spur erhalten:

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

ich mein Testcode aktualisiert, um zu versuchen Verbinden mit mysql-Erweiterung und es funktionierte mit mysql, aber nicht 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"; 

Jetzt bekomme ich {"outcome":false,"message":"SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '\/var\/lib\/mysql\/mysql.sock' (2)"}, während ich versuche, über PDO zu verbinden. Mein Versuch durch mysql ist erfolgreich. Scheint so, als ob das Problem speziell bei PDO liegt. Kann ich etwas überprüfen?

+0

Vermissen Sie $ dbport = $ _SERVER ['RDS_PORT']; im PHP-Code? – error2007s

+0

sollte es 3306 nicht standardmäßig versuchen? –

+0

Ersetzen Sie aws-test-db.hibizibi.us-west-2.rts.amazonaws.com; dbname = test; port = 3306; in dbh und dann sehen, ob Sie in der Lage sind zu verbinden? – error2007s

Antwort

2

Dies ist eine sehr alte Frage, aber ich hatte genau das gleiche Problem und wollte es hier für jeden, der das später findet, dokumentieren.

Das Problem

  1. Sie mit Ihrer Datenbank verbinden können (Amazon RDS) manuell über die Befehlszeile.
  2. Sie können eine Verbindung zu Ihrer Datenbank über mysqli in PHP herstellen.
  3. Sie können nicht Verbindung zu Ihrer Datenbank über PDO in PHP.

Die Lösung

Für mich nach fast alles versucht, entschied ich mich zufällig zu versuchen und einen neuen Datenbankbenutzer zu erstellen. Das hat funktioniert und ich konnte mich jetzt über PDO verbinden.

Dies veranlasste mich, das Problem ein wenig weiter zu untersuchen, und ich konnte das Problem auf einen Backslash \ Zeichen in meinem MySQL-Passwort eingrenzen.

Es scheint eine Art von Konflikt zwischen ENV Vars (mit \), PHP und PDO.

Verwandte Themen