- 締切済み
phpからPostgresqlへ問い合わせ
phpでジャンルを検索するシステムをつくっているのですが、どうも上手くいきません。 ジャンルは、 ・基本問題 ・応用問題 ・発展問題 これだけあり、Postgresにジャンルリストがあります。 phpから、genre = '基本問題'を選択して表示させると、なぜか応用問題まで、選択されて表示されます。 ”基礎問題”でも同様の文字列と判断されます。 php,postgresともに文字コードはEUC-JPなのに、どうしてこんなことが起こるのでしょうか? もしかしたら、postgresの問題かもしれませんが、よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- moon_night
- ベストアンサー率32% (598/1831)
考えられることといえば、PHPファイルそのものの文字コードが違うとか。 PHPやMysqlの文字コードを設定しても PHPファイル(実行ファイル)の文字コードがsjisで作ってたりする場合問題がありそうです。 マルチバイト関数 http://search.net-newbie.com/php/ref.mbstring.html でエンコードすれば直る可能性も。 カラム名を変数に入れると直るというよく分からないことが起こったりする可能性もあります。 ただ、一番の解決法はテーブル名、カラム名に日本語を使わないことだったりします。
- moon_night
- ベストアンサー率32% (598/1831)
なんとも言えないので補足要求。 1、テーブルをどのように保存しているか(テーブルで分けている?カラム名で分けている?) 2、呼び出しはどのようにしているか?(SQL文) ついでにOSとバージョンとかも入れてくれれば正確にこたえることができるかも知れません。
補足
tableの内容は以下の通りです。 |genre_name| ------------ |基本問題| |応用問題| |発展問題| ジャンル名のカラムがありそこにいれてあります。 SQL文は、 pg_query(DBname, "select * from TABLEname where genre_name = '基本問題'"); です。 OSはfedora2です。 phpは4.3.8です。 PostgreSQLは7.4.2です。 よろしくお願いいたします。
お礼
ご回答ありがとうございます。 早速試してみましたが、同じ現象が起きていまいました・・・。 そもそも、「基本問題」と「発展問題」はちゃんと区別してくれるので、文字化けしているということではないような気がします・・(なんとなく)。 ちなみに試してみたのですが、「始祖問題」も同じような結果になりました。 基本問題=基礎問題=応用問題=始祖問題と同じ文字だと認識してるみたいです。 これは、文字コードの問題なんでしょうか? よろしければ、またご教授ください。