2009-09-16 18 views
24

今日、PHP 5.30に移行するためにlamppの最新バージョンを削除して再インストールしました。突然、非常に単純なアプリケーションがmysqlデータベースに接続できません。私は接続するためにPDOを使用して、次のエラーを受信して​​います:私はそれをデバッグのために、現時点でエラーをキャッチしていないですPHPで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つの他の人を見つけたが、それらのどれも応答を受信して​​いません、仕事量がはるかに少ない。誰が何が起きているのか知っていますか?私が構成で見逃したことはありますか?それを修正するために何をする必要がありますか?

答えて

51

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

  1. "のmysql:ホスト= 127.0.0.1" または「MySQLのホストを= localhostの;ポート= 3306"
  2. "のmysql:PDOが指定することによりにmysql.sockを見つけることができるようにunix_socket =の/ var /実行/ mysqldを/ mysqld.sock"
+1

MySQLが "localhost"を "私はUnixソケットを使用するつもりだ"と意味するのはなぜか分かりません – TML

+1

Perfect。 xampp lamppのインストールでは、/opt/lampp/var/mysql/mysql.sockの使用が必要でしたが、問題はオプション2で解決されました。 – krdluzni

+0

あなたがソケットを見つけることができてうれしい - 私はそこに例を投げて、あなたがそれを見つけることを祈った。 :) – TML

1

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

+0

私はすでに、ことをチェックしました。それをシャットダウンして再起動する時点まで。 – krdluzni

+0

あなたはそれが*最も一般的な*であることをどのように知っていますか? – dakab

9

あなたは、php.iniを変更したい場合がありますpdo_mysql.default_socket = /opt/lampp/var/mysql/mysql.sock(xamppの場合)。 php.iniの変更後にApacheを再起動することを忘れないでください。

(申し訳ありませんが、これは繰り返しているようです)

24

db接続文字列に "localhost"を指定するのではなく、127.0.0.1を使用して、この問題を完全に回避することもできます。

+4

回答はシステム管理者向けです。これは開発者向けです;)ありがとう! – jack

4

私はこのプロジェクトでMemb 2.0.1とSymfony 1.4とDoctrineを使用しています。

第三の選択肢は、小さな変更で私のために働い:/config/databases.yml

dsn: 'mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=MY_DB_NAME;' 
関連する問題