質問

昨日、私のコードは問題なく機能していましたが、今日は突然私のデータベースに接続したくありません。コードやコードの設定を変更しておらず、ソフトウェアも更新していません。私がすることはこれだけです:

new PDO( 'mysql:host = localhost; port = 3306; dbname = test'、 'username'、 'password');

そして、次のような素晴らしい例外メッセージが表示されます:

警告:PDO :: __ construct():[2002]そのようなファイルまたはディレクトリはありません(unix:///tmp/mysql.sock経由で接続しようとしています)...

問題は、UNIXソケットを使用して接続するのではなく、TCP / IPを使用して接続することです。何が間違っていますか?ここに足りないものはありますか?

ご協力ありがとうございます。

役に立ちましたか?

解決

Unixソケットを使用しています。 " localhost"を読むときMySQLクライアントライブラリは、TCPホスト" localhost"として解釈しません。その名前を解決しますが、デフォルトのソケットの場所を使用します。ローカルマシンでTCPを使用するには、ホスト名として 127.0.0.1 を使用する必要があります。

過去を指定するには、DSNで host の代わりに unix_socket を使用します。 localhost に使用されるソケットの場所は、コンパイル時に、または php.ini pdo_mysql.default_socket を使用してPHPの一部のバージョンで定義できます。 。

他のヒント

PDOを使用したMySQLへの接続に関するPHPドキュメントから: PDO_MYSQL DNS

最後のメモには次のように書かれています:

  

Unixのみ:

     

ホスト名が" localhost"に設定されている場合、   サーバーはドメインソケットを介して作成されます。 PDO_MYSQLがに対してコンパイルされる場合   libmysqlの場合、ソケットファイルの場所はlibmysqlにあります   コンパイルされた場所。 PDO_MYSQLがmysqlndに対してコンパイルされる場合   デフォルトのソケットは、pdo_mysql.default_socket設定で設定できます。

これを修正するには、php.iniでmysql.sockの場所を適切に設定する必要があります

  1. mysql.sockファイルを見つけます。一般的な場所:

    • /tmp/mysql.sock
    • /tmp/mysql/mysql.sock
    • /var/mysql/mysql.sock
    • またはMAMPまたはLAMPを使用する場合は、mysqlのtmpフォルダー内を探します
  2. php.iniファイルを編集し、pdo_mysql.default_socketの値を適切に設定します

  3. Apacheサーバーを再起動して、php.iniファイルの変更を取得します

Ubuntuでは、php.iniでこの設定を使用できます

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock

この行を追加しました:

'unix_socket'   => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',

そしてすべてが順調でした。

こちらに記載されているDrushのドキュメントの更新があります。

>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top