今日、php 5.30に移行するためにlamppの最新バージョンを削除して再インストールしましたが、非常に単純なアプリがmysqlデータベースに接続できませんでした。接続にPDOを使用していますが、次のエラーが表示されます。
Warning: PDO::__construct() [pdo.--construct]: [2002] Invalid argument (trying to connect
via unix://) in /home/raistlin/www/todoapp/home.php on line 9
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002]
Invalid argument' in /home/raistlin/www/todoapp/home.php:9 Stack trace: #0
/home/raistlin/www/todoapp/home.php(9): PDO->__construct('mysql:Host=loca...', 'USER',
'PASSWORD') #1 {main} thrown in /home/raistlin/www/todoapp/home.php on line 9
現時点では、デバッグのためにエラーをキャッチしていません。
私のシステムで問題を再現するには、次のコードで十分です。
<?php
$DBACCESS = array(
"connstring"=>"mysql:Host=localhost;dbname=todoapp",
"Host"=>"localhost",
"user"=>"user",
"password"=>"password",
"todoapp"=>"todoapp"
);
echo implode('<br \>',$DBACCESS);
$dbh = new PDO($DBACCESS['connstring'],$DBACCESS['user'],$DBACCESS['password']);
$dbh = null;
?>
オンラインで見ると、同じ問題を抱えている他の1人または2人の人を見つけましたが、誰も応答を受け取っていません。誰が何が起こっているか知っていますか?構成で見逃したものはありますか?修正するには何をする必要がありますか?
通常、TCP/IPを指定する必要があることを意味します(1)、またはUnixソケットがどこにあるかをMySQLに伝えます(2):
この問題を完全に回避するには、db接続文字列で「localhost」を指定する代わりに127.0.0.1を使用することもできます。
Php.iniを変更して、PDOがpdo_mysql.default_socket = /opt/lampp/var/mysql/mysql.sock
(xamppの場合)を指定してmysql.sockを見つけられるようにすることができます。 php.iniを変更した後、Apacheを再起動することを忘れないでください。
(申し訳ありませんが、これは繰り返しの解決策のようです)。
このプロジェクトでは、MAMP 2.0.1とSymfony 1.4をDoctrineとともに使用しています。
3番目のオプションは少し変更するだけで機能しました:/config/databases.yml
dsn: 'mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=MY_DB_NAME;'
このようなエラーの最も一般的な原因は、MySQLが実行されていないことです。