0

最近 Zend Framework を使い始めました。ローカルの XAMPP サーバーで開発を開始しましたが、問題なく動作しましたが、1and1 アカウントにアップロードすると、次のエラーが発生し続けます。

メッセージ: SQLSTATE[HY000] [2002] ソケット '/var/run/mysqld/mysqld.sock' を介してローカル MySQL サーバーに接続できません (2)

application.ini ファイルの resources.db.params.unix_socket 行を phpinfo に記載されている別の行に変更しようとしましたが、成功しませんでした。私はここで誰かが答えたことを見つけました

MySQL サーバーは Web アプリケーションと同じホストにありますか? そうでない場合は、ソケット接続を使用できず、TCP 経由で接続する必要があります。

それは私のウェブホストにも当てはまると思います。代わりに、TCP 経由で接続するように ZF を変更するにはどうすればよいですか? 現在 PDO_MYSQL を使用しています。

4

3 に答える 3

4

MySQL への接続方法は、mysql_connect()に渡すパラメーターによって異なります。ファイルパスを渡すと、つまり. /var/run/mysqld/mysqld.sock、ソケット接続を試みます。ホスト名を渡すと、TCP 接続を試みます。

mysql サーバーのホスト名 (または IP) を見つけて、次のように接続する必要があります。

mysql_connect('127.0.0.1:3306',$username,$password);

hostオッズはZFの場合です。これは、データベース設定を保存する構成ファイルで指定するか、設定を使用してデータベースに接続するときに指定できます。

$db = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname'   => 'test'
));

編集:適切なホスト名/ポートをホスト パラメータとして渡してこのメ​​ッセージを受け取っている場合mysql_connect()、サーバー構成の問題である可能性が最も高いです。

mysql.default_socketphp.ini またはアプリケーション コードの先頭で、ini_set()を使用して設定を調整してみてください。

ini_set('mysql.default_socket','/path/to/real/socket.sock');

ソケットファイルがどこにあるかを把握する必要があります。多くの場合、「/var/lib/mysql/mysql.sock」ですが、システムに依存していると思います。

于 2009-08-05T20:42:55.577 に答える
1

私はラインを離れました:

defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));

私のindex.phpではそのままですが、public/.htaccessをに変更しました

SetEnv APPLICATION_ENV production

.htaccessが読み取られていなかったようです。index.phpのelseステートメントを「production」に変更して本番データベースの設定を使用しましたが、機能しました。かなりイライラする。なぜ環境変数が読み取られなかったのだろうか。ご協力いただきありがとうございます。

于 2009-08-07T04:30:13.143 に答える
0

Zend Framework には db paramsunix_socketにオプションがあります。単純に使用してください。

 $config= array(
 'db' => array(
'host'   => 'localhost',
'username' => 'user',
'password' => 'pass',
'dbname' => 'dbname',
'dbprefix' => '',
'unix_socket' => '/var/lib/mysqld/mysqld.sock'
  )
);
于 2015-02-12T08:43:54.490 に答える