• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:TESTデータベースしか入れません)

PHP初心者がMySQLへの接続で困っています

このQ&Aのポイント
  • PHP初心者がFreeBSD5.4とApache2を使いMySQLに接続できません。パスワード認証につまずいており、原因と対処法が分かりません。
  • 現在FreeBSD5.4を使いPHP4.3.10とMySQL5.0.16を用いて開発を行っていますが、PHPからMySQLの接続につまづいています。
  • MySQLへの接続でパスワード認証に問題があり、解決方法が分かりません。ApacheとPHPは正常に動作しており、ターミナル上でもMySQLに接続できています。

質問者が選んだベストアンサー

  • ベストアンサー
  • mooboogie
  • ベストアンサー率68% (28/41)
回答No.3

エラーコード、エラー内容は、以下の方法で取得できます。 $link = mysql_connect("localhost", "root", "***"); if $(!$link){ die('NG mysql_connect: ' . mysql_errno() . ' ' . mysql_error()); } よかったら取得してみてください。 何か分かるかもしれません。

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/c-api-function-overview.html
tomy84jp
質問者

お礼

mooboogieさん ありがとうございます! おかげさまで,うまくrootから入れるようになりました! mysql_error();をやると, Client does not support authentication protocol requested by server; consider upgrading MySQL client と表示されました. これを見て,やはり問題はユーザー識別でのエラーであり,特にパスワードを指定しない場合は問題なくデータベースアクセスできるところからも,パスワードがおかしいと確信しました. そこでいろいろ調べていくと,パスワードの暗号化には旧式と新型があることが分かり, update user set password=OLD_PASSWORD('***') where user = 'user1'; とやることによって旧式暗号化を施した後にページへアクセスしてみると,無事エラーも出ず入ることが出来ました. やはり原因はパスワード認証でした. mooboogieさんのおかげで無事サーバー立ち上げに成功しました. 本当にありがとうございました.

その他の回答 (2)

  • mooboogie
  • ベストアンサー率68% (28/41)
回答No.2

#1です。 >opensslの警告 わかりません。申し訳ないです。 ダブりがある、みたいなメッセージですね。 また、逆質問で申し訳ないですが、2つ程。 1. >$link = mysql_connect("localhost", "root", "***"); ここでのエラーメッセージはどんなものが出力されるのでしょうか? 2. 件名の「TESTデータベースしか入れません」に軽く疑問を覚えたんですが、書き間違えただけですよね? 「php経由のMySQL接続をrootユーザにおいて実施できない」 という質問であるとの認識で、引き続き勉強させてもらいます。

tomy84jp
質問者

お礼

mooboogieさん ありがとうございます. 1に関してですが, $link = mysql_connect("localhost", "root", "***") or exit('MySQLへ接続できません'); としているので,エラーメッセージは「MySQLへ接続できません」と表示されます.なお,httpd-error.logには何の記述もされません. 2に関しては,user1というパスワードなしのユーザならば実施できるので,「PHP経由でMySQL接続をパスワード認証を経て実施できない」というのが最も適当かと思います. ご助力ありがとうございます. こちらもいろいろと試してみます.

  • mooboogie
  • ベストアンサー率68% (28/41)
回答No.1

・user1ユーザでのphp経由接続が可能であること。 ・コンソールでの mysql -u root -p での接続が可能であること。 この2点から、MySqlとphpの設定は問題がないとしても良い気がします。 疑うべきはApache2の設定だと思います。 念のため、以下コマンド結果を教えてください。 select host,user,password from mysql.user where user in ('root','user1'); ※パスワードは、設定されているか、否か。暗号化されているか、否か。  だけで結構です。

tomy84jp
質問者

お礼

mooboogieさん 返信ありがとうございます. select ・・・ の結果ですが, rootはパスワード設定されており,暗号化もされています. user1はパスワード設定をしておらず,当然暗号化もしていません. つまり,やはりパスワード認証の段階でつまづいているものだと思われます. エラーログとしてhttpd-error.logを見てみたところ,PHPを立ち上げる時にopensslの警告がいくつも出ているので(PHP Warning; function registration failed - duplicate name - openssl_**** in unknown on line0というような警告メッセージが大量にあります),SSL環境の設定がなされていない可能性も考え,SSLの設定関連をいくつか調べているのですが,SSLには詳しくないため,今調べているところです. この情報でなにかわかりますでしょうか?