web-dev-qa-db-ja.com

PHPでPDOへの接続を作成する際のエラー

今日、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人の人を見つけましたが、誰も応答を受け取っていません。誰が何が起こっているか知っていますか?構成で見逃したものはありますか?修正するには何をする必要がありますか?

25
krdluzni

通常、TCP/IPを指定する必要があることを意味します(1)、またはUnixソケットがどこにあるかをMySQLに伝えます(2):

  1. 「mysql:Host = 127.0.0.1」または「mysql:Host = localhost; port = 3306」
  2. 「mysql:unix_socket =/var/run/mysqld/mysqld.sock」
51
TML

この問題を完全に回避するには、db接続文字列で「localhost」を指定する代わりに127.0.0.1を使用することもできます。

24
jefftulsa

Php.iniを変更して、PDOがpdo_mysql.default_socket = /opt/lampp/var/mysql/mysql.sock(xamppの場合)を指定してmysql.sockを見つけられるようにすることができます。 php.iniを変更した後、Apacheを再起動することを忘れないでください。

(申し訳ありませんが、これは繰り返しの解決策のようです)。

9
reeserc

このプロジェクトでは、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;'
4
tacheshun

このようなエラーの最も一般的な原因は、MySQLが実行されていないことです。

2
pilsetnieks