- 締切済み
php5+mysqlのSELECT文でwhere句を指定すると正しく動
php5+mysqlのSELECT文でwhere句を指定すると正しく動きません。 レコード数を取得します。 ここで、field10(category)=text型の値に基づきレコード数を取得したいのですが、 $sql="select * from A where B='C'"; とするとレコード出力(index.php)で0を出力。 where句を指定せずに $sql="select * from A"; とするとレコード出力(index.php)で97を出力。 文字コード関係のQ&Aサイトを見ましたが、phpファイルの冒頭部分に $con = mysql_connect($DBSERVER, $DBUSER, $DBPASS); mysql_query("SET NAMES 'sjis'"); $selectdb = mysql_select_db($DBNAME, $con); を指定しています。 テーブルAに含まれるデータは、csv(,区切り)で、load data infile・・・しました。 ※Records:97 Deleted:0 Skipped:0 Warnings:0 他に考えられる原因・対処方法はありますでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- BellBell
- ベストアンサー率54% (327/598)
とりあえず、対象のサーバにはPHPMyAdminはインストールされていないのでしょうか? 可能ならインストールしてみてください。 http://www.phpmyadmin.net/home_page/ その上で同じSQLを実行して見れば、判りやすいですよ。 そもそも、エラーで何も取得出来ていないのか、検索条件に合うデータが存在しないので何も取得できないのか、それさえ現状では判っていない状態ではないでしょうか? 別の信頼できる手段で確認すると言う意味で、PHPMyAdminでの確認は最適です。
- gau_puzzler
- ベストアンサー率48% (39/81)
レコード数を取得したいのであれば select count(*) from A; categoryの種類数であれば select count(distinct category) from A; ではないかと? select * from A where B='C'; はBの列が'C'であるデータを検索しますが、1件目を取得するのみで 全体件数はループしないとわかりません
補足
ご回答ありがとうございます。また、お返事が遅くなり申し訳ありません。 説明不足で申し訳ありません。 select * from A where B='C'; に引き続き mysql_query($sql, $con); mysql_num_rows($rst); を実行しています。 念のためご指摘の方法で、cmd、phpファイルを試してみましたが、 結果は同じでした。
- taka451213
- ベストアンサー率47% (436/922)
こんばんは 文字コードに関しては、できるだけDB、PHPともに合わせた方がいいですよ。 PHPから「mysql_query("SET NAMES 'sjis'");」をしても、あまり意味がないかと・・・。 そもそもMySQLの文字コード「show variables like 'character_set%';」の各値がどうなっているのか? PHPの文字コードはどうなっているのか? この辺りを見直した方がいいかと・・・。
お礼
追加補足ができないので、お礼から入力します。 mysqlのstatus; Server characterset: sjis Db characterset: sjis Client characterset: sjis Conn. characterset: sjis php.ini [mbstring] mbstring.internal_encoding = sjis
補足
ご回答ありがとうございます。お返事が遅くなり申し訳ありません。 cmdでご指摘の文を実行すると下記のように表示されました。 character_set_client | sjis | character_set_connection | sjis | character_set_database | sjis | character_set_filesystem | binary | character_set_results | sjis | character_set_server | sjis | character_set_system | utf8 | character_sets_dir | D:\Program Files\MySQL\MySQL Server 5.0\share\ charsets\ | mysqlのFAQ等読みましたが、すみません、理解できませんでした。 また、最後のcharacter_sets_dirで指定されたディレクトリ内のlanguages.htmlを見ましたが、こちらも最初と最後の文以外は#でコメントアウト?のような感じでした。
補足
ご回答ありがとうございます。また、お返事が遅くなり申し訳ありません。 ご指摘の通りバージョン適合確認後phpmyadmin3.3.2をインストールしSQL文を実行しました。 select * from A; では97件が抽出されはじめの30件がすべて正常に表示されていました。 続いて select * from A where B = 'C'; では「返り値が空でした(行数0) ( クエリの実行時間 0.0012 秒 )」となりました。 Bフィールドの型は、category text, 実際に格納されているデータは英字でcommonか、parか・・・という具合に半角英数字のみが入っています。