2016-09-30 20 views
0

Mac OS 10.11.3でPHP 5.6.7でMAMP 5.5.42を使用しています。Unixソケット経由のMySQL接続は、mysqliでは動作しますが、PDOでは動作しません。

try{ 
$db = new PDO('mysql:host=localhost:8889;dbname=lacolshow_database;charset=utf8', 'root', 'root'); 
} 
catch (PDOException $e) { 
    var_dump($e->getMessage()); 
} 

上記のコードは、例外を発生させず、空のPDOオブジェクトを生成します。次のようにコードスニペットです。

localhost:8889がちょうどlocalhost上記のコードでで置き換えられている場合、例外がメッセージ SQLSTATE[HY000] [2002] No such file or directoryで上昇させます。

localhost:8889は、上記のコードで127.0.0.1により置換されている場合は、例外がメッセージ SQLSTATE[HY000] [2002] Connection refusedで上昇させます。

助けてください。

アップデート:私はPDOの代わりにmysqliのを使用する場合、接続が機能

$mysqli=mysqli_connect('localhost', 'root', 'root', 'lacolshow_database', NULL, '/Applications/MAMP/tmp/mysql/mysql.sock'); 

http://php.net/manual/en/pdo.construct.phpにおける第二のコメントで助言以下は、私が試した次

$dsn = 'mysql:dbname=lacolshow_database;unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock'; 
$db = new PDO($dsn,'root', 'root'); 

が、これも失敗し、空のPDOオブジェクトが生成されます。

答えて

1

port is going into distinct parameterではなく、hostにあります。だから、それはあなたが例外をキャッチしてのvar_dumpする必要はありません

$db = new PDO('mysql:host=localhost;port=8889;dbname=lacolshow_database;charset=utf8', 'root', 'root'); 

注意する必要があり、PHPはそれ自体であなたに

+0

あなたが提案するものは、空のPDOオブジェクトを生成します。また、私のPHPはPDO例外を単独では表示しません。私がtry/catchのものを追加しないと、ページをリクエストすると空白のページが表示されます –

+0

エラーが表示されるようにするには、php.iniの表示エラーを有効にする必要があります –

+0

本当に、 –

1

1を、それが表示されます)あなたは、接続のポート番号を追加する必要がありますあなたのDBに接続する文字列。あなたのDBサーバはあなたのローカル環境のポート番号:8889で動作しているので、はDB接続文字列で使用されても例外は発生しません。

2)あなたはlocalhostによってlocalhost:8889を交換する場合は、接続が確立しませんとメッセージSQLSTATE[HY000] [2002] No such file or directoryとエラーがそれはソケット経由でMySQLの接続が)(をサポートしていませんを試していることを示し発生します。

3)あなたは、接続の試行が行われますが、拒否されます127.0.0.1使用し、SQLSTATE[HY000] [2002] Connection refused.これは、SQLデータベースがオフラインまたは間違ってアクセスされているのいずれかであったことを意味します。 ポートまたはソケットパスが正しくない可能性があります。

したがって、最初の点は、DBサーバーとの接続を確立する正しい方法です。

関連する問題