2011-08-04 6 views
0

Zendアプリケーションを共有サーバー上で動作するMySQLプロセスに接続しようとしています。基本的な設定は、LAMPサーバーで動作していたのでうまくいくはずです。むしろlocalhostより、myprocess.dbZendでSQLプロセスに接続

resources.db.adapter = PDO_MYSQL 
resources.db.params.charset = "utf8" 
resources.db.params.host = mysqlprocess.db 
resources.db.params.username = username 
resources.db.params.password = password 
resources.db.params.dbname = dbname 

しかし、私が行うとき、私はこの取得:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: 
Can't connect to local MySQL server through socket 'please_see_the_faq' (2) 
in /f5/metamusic/protected/application/controllers/SearchController.php on line 418 

問題は、私は、SQLプロセスであるとしてホストを指定する必要があり、

私が使用しているホストはNearlyFreeSpeechです。興味のあるプロセスを指定せずにSQLに接続しようとすると、このメッセージが表示されます。

同じ詳細を使用して、mysql_connect($server, $user)は問題なく動作しますので、Zendは正しいホストパラメータを使用していないようです。

何が問題なのですか?どんな助けでも大歓迎です。

答えて

0

私は今後の参考のためにここに私の最終的な解決策を掲載しています:

それは結局のところ、データベース接続がすでにを働いていました。しかし、mysql_real_escape_string()への私の呼び出しは失敗しました。その結果、エラーメッセージは、データベース接続全体が失敗したことを示唆しました。

解決策は、上記の呼び出しをZend_DB_Adapterのquote()と置き換えるだけで、突然すべてが機能します。

これはLAMPマシンで動作し、共有サーバーでは動作しない理由はわかりません。今のところ、これは十分な解決策です!

+0

問題が見つかりましたらうれしいです。なぜ私はあなたのエラーメッセージで 'mysql_real_escape_string()'に気付かなかったのか、わかりません。あなたがLAMPマシンで複数のMySQLプロセスを持っているのではなく、1つのデフォルトプロセスを持っているので、これが共有サーバー上で動作しない理由は簡単です。 –

0

は、データベース・サーバを指すようにデシベルの設定で

resources.db.params.host = myprocess.db

+0

申し訳ありませんが、私は恐れていません。それは実際には「ホスト」でしたが、私は 'unix_socket'と 'server'を絶望してしまいました。さらなる混乱を避けるために質問を編集します。 –

0

ホストをしている使用してみてください。 localhostまたは127.0.0.1は、アプリケーションと同じサーバー上にあるデータベースの参照です。ホスティング環境では、通常、サーバーはリモートサーバー上にあるため、ホストはホストのIPアドレスまたはDNS名のいずれかでなければなりません。

FAQの2番目の質問を確認してください。

更新
私の悪い、それはDSNではなくDNSについてです。それでも問題はどこにあるのでしょうか。 config内のresources.db.params.hostディレクティブは、データベースサーバーへの参照を予期し、myprocess.dbはDNS名でもIPアドレスでもありません。おそらくlocalhostが必要ですが、それでもDSNが見つからない場合があります。私は現在、MySQLのためにPHPでDSNを設定しているので、Zendをどのように設定しているのか分かりません。このMYSQL DSNをさらに見てください。

更新2 あなたは正しいソケットであり、これは関連しています。問題はZend PDO_MYSQLアダプタだと思います。 ZendはこれをPDOに直接振り向ける()。上記のZend実装にない追加の設定オプション(MYSQL DSN)があります。 PDO_MYSQLアダプタはconnect()メソッドをオーバーライドしますが、このオプションは検索されません。

しかし、別のアダプタmysqliがMySQLに直接接続し、実際にはmysql_connect()でテストと同じ方法で接続します。代わりにmysqli_real_connect()を使用し、その接続がソケットのプロセス名を理解している可能性があります。だから、あなたはあなたの設定で次のことを試すことができます。

resources.db.adapter = "mysqli" 
+0

ええ、私はそれを読んでいます - それはあなたが行っていることであるエイリアス 'yourprocessname.db'を使用すると言います。これはページの説明です:http://i.imgur.com/qK4oU.png。 –

+0

@danH私の更新を見てください –

+0

うーん、PHPのmysql_connect()で 'processname.db'をパラメータとして使っているだけです。私はちょうどZendのソースを見てきました。そして、 'sqlsrv_connect($ serverName、$ connectionInfo);'を使っているようです。 –

関連する問題