- 締切済み
データ検索について
現在フォームに入力された日付を検索して、その値に紐付くデータを 表示させるといった、検索システムを作成しています。 しかしフォームの値が上手く渡りません。 現在の症状としては フォームの値 2008-01-01 × フォームの値 "2008-01-01" ○ 上記の様に値をダブルクォーテンションで囲むと上手く渡るのですが、 囲まないと上手く渡りません。 なぜこのような動作になってしまうのか分からず、解決できません・・・ この解決策をご教授頂けると幸いです。 開発環境は UI Flex DB接続 AMF PHP DB MYSQL 日付のフォーマットはyyyy-mm-dd dateフィールドの値はtext 以下がソースになります。 ************************************************************* //$date フォームの値 function SearchData($date = "") { GLOBAL $dbh; //DB接続 if($date) { $sql = " SELECT * FROM tDate WHERE date = \"".$date."\""; } else { $sql = " SELECT * FROM tDate"; } $result = mysql_query( $sql ); while( $val = mysql_fetch_assoc( $result ) ) { $res_list[] = array( "date" => $val['date'], ); } return $res_list; } ************************************************************* 以上よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
>dateフィールドの値はtext 日付のフィールドにtext型をつけるのは問題外でしょう。 せめてvarchar(char)型にして、普通はdate型で処理します。 そうでなければSQLの性能を発揮するのは難しいでしょう。 おそらく、登録されているデータも無駄なクォーテーションがついて いるのではないでしょうか? それとまずは予約語を使わないってとこから始めましょう。 dateというフィールドはまずいですね。 もしどうしてもdateという名前にしたいなら `date`とバッククォーテーションでくくります。 また $sql = " SELECT * FROM tDate WHERE date = \"".$date."\""; SQLの書き方に工夫が必要かも。 SQLでミスをなくすにはクォーテーションにはシングルクォーテーション をつかうことです。 そうすればPHPでよくつかうダブルクォーテーションと競合せず 無駄なエスケープがへります。 (逆よりは汎用性があがるでしょう)
お礼
ご回答ありがとうございます。 ご教授通りテーブル設計・SQL内のシングルクォーテーション 等試してみましたが、未だに同様の現象が発生してしまいます・・・