- ベストアンサー
データベースへの接続方法とエラー解決法
- データベースへの接続方法とエラー解決法を詳しく説明します。
- データベースへの接続方法とエラー解決法についての質問に回答します。
- データベースへの接続方法とエラー解決法についての解説をします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ソースコードを確認しました。 >$sql = mb_convert_encoding($sql,"SJIS","EUC-JP"); DBへの検索をかける際に、わざわざEUCに変換を行っていますね。 多分、DB側の文字コードにあわせるための処理だと思いますが、ここで問題が発生しているのではないかと思います。 現在のMySQL(多分5.0を使用していると思います。)はDB接続の際に、プログラム側とデータベース側の文字コードを確認し、自動変換を行います。 #これはこれで問題があったりはするのですが。 ご利用の本は、2005/08に発行されているようですので、MySQLのバージョン4.0(文字コード変換機能がない)に沿って書かれているのではないかと思います。 まずは、プログラム中のmb_conbert_encoding部分をコメントアウトしてみてはいかがでしょうか。 なお、プログラム中で、addslashesを使用していますが、この関数も問題を起こす原因になります。 詳しくは解説しませんが、「addslashes shift-jis」などのキーワードで検索してみてください。 -------------------------------- 私は、XAMPPのサービスのMySQLで(以下省略) -------------------------------- この形であれば、インストールしたMySQLを使用しているでしょうね。 XAMPPのMySQLが利用できないという場合いろいろ原因がありうるので、「XAMPP MySQL 起動できない」などで、検索するのがいいかと。 まぁ、今のところMySQLが利用できているようなので、まずはこのままでもいいのではないかと思います。
その他の回答 (2)
- eitetsu
- ベストアンサー率64% (22/34)
ひとつ確認です。 ----------------- mysql> show fields from member; ----------------- これは、XAMPP側のMySQLで実行したものですか? それであれば、MySQLは、XAMPP側のものを利用してください。 また、その場合ですと、最初の接続部分のユーザ名、パスワード、データベース名を確認してください。 [not found]というエラーが「memberテーブルがない」ということを最初創造したのですが、もしかすると、mysqlに接続する際のデータベース名が間違っていて、not foundとなっているかもしれません。 一度、処理中のどの場所で、上記のエラーメッセージが出ているかを確認して、そこから原因の絞込みを行ってみてください。
お礼
回答ありがとうございます。 データベースに接続する構文のlist.phpを見直してみると、$dbType="mysql";が抜けていました。これが原因でエラーがでてきたのだと思います。 eitetsuさんのおかげで、接続する事が出来たのですが、田中と検索すると、検索件数が0と出てきました。 mysql> SELECT*FROM member; +----+-----------+------------+------+ | id | last_name | first_name | age | +----+-----------+------------+------+ | 1 | 田中 | 一郎 | 21 | | 2 | 山田 | 二郎 | 18 | | 3 | 林 | 三郎 | 35 | | 4 | 鈴木 | 四郎 | 10 | | 5 | 佐藤 | 五郎 | 28 | +----+-----------+------------+------+ 5 rows in set (0.00 sec) 上記の様にテーブルを作っているので、一件表示されるはずなのですが、無理でした。これはlist.phpの構文に問題があるのでしょうか?? list.phpの構文はエラーが起こってしまう時のものですがhttp://oshiete1.goo.ne.jp/qa3575866.htmlに記述しています。文字数の制限で、今のlist.phpをかけませんでした。 やはりMySQL側の問題なんでしょうか?? 私は、XAMPPのサービスのMySQLでMySQL Command Line Clientを出してテーブルを作ることが出来なかったので、一回アンインストールし、MySQLを最初にインストールし、その後でXAMPPをインストールし、最初の設定で、MySQLをサービスとして使用しないと選択したのですが、それでもXAMPPのMySQLでテーブルを作ってしまうんでしょうか? XAMPPのサービスのphpMyAdmin 2.11.1へは特に何もいじってないんですけど、エラーが起きてはいれませんでした。
- eitetsu
- ベストアンサー率64% (22/34)
まず最初に。 「以前の質問の~」とありますが、これだけですと前の質問が捜せません。 なるべく以前の質問へのリンクを記載するようにしてくださいね。 今回の質問の場合は、 >MYSQLをインストールした後で、XAMPPをダウンロードしたのですが、それが原因なんでしょうか? とありますので、これが原因と思います。 XAMPPにもMySQLは含まれていますが、テスト時には先にインストールしたMySQLとXAMPPのMySQLのどちらを起動しているでしょうか。 XAMPPコントロールパネルからの起動では、先にインストールしたMySQLは起動しません。 おそらく、先にインストールしたMySQLにmemberテーブルが作成してあるのでしょうが、XAMPP側のMySQLを立ち上げているため、memberテーブルが存在していないのではないでしょうか。 以下の手順でも現象が発生するか、確認してみてはどうでしょうか。 1)XAMPPコントロールパネルでMySQLを停止する 2)以前インストールしたMySQLを起動する (インストールしたときの起動方法で) 3)この状態で、もう一度プログラムを実行する
お礼
回答ありがとうございました。 そして、すいませんでした。 確かに前の質問のリンクをつけるべきでした。 以後気をつけます。 まず、(1)の通りにMySQLを停止させ、MySQLを起動させました。 起動というのはMySQL Command Line Clientのパスワードを入れて起動するといううことでしょうか?そうであれば、パスを入力すると、エラーなのか、すぐに消えてしまいました。コマンド プロンプトからも同じようにMySQLに接続できません。と出てきました。 XAMPPコントロールパネルでMySQLを起動させると、パスが入力できます。 これは、私が作成したmemberテーブルのMySQLはXAMPPコントロールパネルでMySQLを起動させている方というう事でしょうか?
お礼
ソースコードを確認までして頂き、大変ありがとうございます。 eitetsuさんの指摘を参考にし、プログラムを変更してみました。 まず、『if(preg_match("/Windows/",$_ENV["OS"])){$sql = mb_convert_encoding($sql,"SJIS","EUC-JP");』を削除しました。 次に <?php while($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)) { if(preg_match("/Windows/",$_ENV["OS"])){ $rs['last_name'] = mb_convert_encoding( $rs['last_name'],"EUC-JP","SJIS"); $rs['first_name'] = mb_convert_encoding( $rs['first_name'],"EUC-JP","SJIS"); } ?> を <?php while($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)) { ?> に変更しました。 以上の変更で、正常に検索できる様になったのですが、addslashesも文字化けの原因になる様なので、addslashesをstripslashesに変更したのですが、意味はあったのでしょうか? 最初の目標であった、データ検索まで出来るようになり、とても感謝しています。 最後まで付き合っていただき、ありがとうございました。