web-dev-qa-db-ja.com

Zendチュートリアルから開始-Zend_DB_Adapterが例外をスローする: "SQLSTATE [HY000] [2002] No such file or directory"

ドイツ語の「Zend Framework in Action」という本でZend Frameworkを学び始めました。

すぐそこに興味を持ち始めたところ、私のPHP Unit Testはこのエラーを投げます: "Zend_Db_Adapter_Exception:SQLSTATE [HY000] [2002] No such file or directory"

Googleの検索でヒントが見つかりません。私はそれが本にあるようにすべてをしました。誰が障害を検索するかについてのヒントを教えてもらえますか?

これは初心者によくある間違いですか?

69
Oliver

PHPからMySQLへの接続に問題があります...

PHPソケットファイルを見つけようとして、見つけられないかもしれませんか?
(私はこの問題を何度か経験しましたが、私が受け取ったエラーが正確にこれであったかどうかはわかりませんが)


Linuxベースのシステムを実行している場合は、my.cnfファイルは、MySQLの設定に使用されます。Ubuntuでは、/etc/mysql/

このファイルには、次のようなものがあります。

socket = /var/run/mysqld/mysqld.sock


PHPは同じファイルを使用する必要があります。ディストリビューションによっては、デフォルトのファイルがMySQLが使用するファイルと同じでない場合があります。

この場合、これらの行をphp.iniファイルが役立つ場合があります。

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

(Apacheを再起動して、php.iniが考慮されます)

最後の1つはZend Frameworkで使用されるPDOに十分なはずですが、前の2つは害を及ぼさず、他のアプリケーションに役立ちます。


これで解決しない場合:別のスクリプトでPDOを使用してデータベースに接続できますか。これはZend Frameworkから完全に独立していますか?

つまり、このような作業を行います (quoting)

$dsn = 'mysql:dbname=testdb;Host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

いいえの場合、問題は間違いなくZFではなく、PHPの構成/インストールの問題です。

はいの場合...まあ、それはあなたがZFに問題があることを意味し、セットアップに関する詳細情報を提供する必要があります(たとえばDSNのように?)

74
Pascal MARTIN

異なるunix_socketを想定せずに見つけてください。

まず、nix_socketの場所を取得

$ mysql -u root -p

Mysqlパスワードを入力し、コマンドラインからmysqlサーバーにログインします。

mysql> show variables like '%sock%';
+---------------+---------------------------------------+
| Variable_name | Value                                 |
+---------------+---------------------------------------+
| socket        | /opt/local/var/run/mysql5/mysqld.sock |
+---------------+---------------------------------------+

Unix_soketは異なる場合があります。

次に、php.iniを変更し、php.iniファイル

<? phpinfo();

異なるバージョンの多くのphpをインストールする可能性がありますので、php.iniファイルの場所を想定せずに、「phpinfo」から取得してください。

Php.iniを変更します。

mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock

pdo_mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

次に、Apacheまたはphp-fpmを再起動します。

35
lijinma

Db設定ファイルでHost = 127.0.0.1を設定してみてください。うまくいきました! :)

それが役に立てば幸い!

15
Jordi Corominas

osxでmagentoインデクサーを実行すると、この問題が発生しました。はい、pdo経由でmysqlに接続するときのphp問題に関連しています

mac osx xamppでは、これを修正するためにディレクトリ/ var/mysqlへのシンボリックリンクを作成しました。

cd /var/mysql && Sudo ln -s /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

ディレクトリ/ var/mysqlが存在しない場合は、次を使用して作成する必要があります。

Sudo mkdir /var/mysql
6
risnandar

私もこの問題に悩まされており、単にIPアドレスの後にポート番号を追加するによって私を救った。

$dsn = 'mysql:dbname=sms_messenger;Host=127.0.0.1:8889';
$user = 'root';
$password = 'root';

これはMac OSで機能します

Mysqlのポート番号がわからない場合は、
MAMPホームページでポート番号を簡単に見つけることができます

OR

MAMPサーバーの実行中に次のコマンドを入力して、ターミナルをmysqlに切り替えます

OMBP:mamp Omal$ /Applications/MAMP/Library/bin/mysql --Host=localhost -uroot -proot

次に入力

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
4
Omal Perera

このエラーは、mysqlが間違ったソケットファイルを介して接続しようとしているためです

mAMPサーバーでこのコマンドを試してください

cd /var/mysql && Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock

または

cd /tmp && Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock

xAMPPサーバー用のこのコマンド

    cd /var/mysql && Sudo ln -s /Applications/XAMPP/tmp/mysql/mysql.sock

または

    cd /tmp && Sudo ln -s /Applications/XAMPP/tmp/mysql/mysql.sock
1

Mysqlサービスが機能していないか、停止しているようです。以下のコマンドを使用して起動できます(Ubuntuの場合):

service mysql start

うまくいくはずです! Ubuntu以外のオペレーティングシステムを使用している場合は、適切な方法を使用してmysqlを起動します

1