回答受付中の質問
現在フォームに入力された日付を検索して、その値に紐付くデータを
表示させるといった、検索システムを作成しています。
しかしフォームの値が上手く渡りません。
現在の症状としては
フォームの値 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;
}
*************************************************************
以上よろしくお願い致します。
投稿日時 - 2008-12-15 10:12:28
0人が「このQ&Aが役に立った」と投票しています
回答(1件中 1~1件目)
>dateフィールドの値はtext
日付のフィールドにtext型をつけるのは問題外でしょう。
せめてvarchar(char)型にして、普通はdate型で処理します。
そうでなければSQLの性能を発揮するのは難しいでしょう。
おそらく、登録されているデータも無駄なクォーテーションがついて
いるのではないでしょうか?
それとまずは予約語を使わないってとこから始めましょう。
dateというフィールドはまずいですね。
もしどうしてもdateという名前にしたいなら
`date`とバッククォーテーションでくくります。
また
$sql = " SELECT * FROM tDate WHERE date = \"".$date."\"";
SQLの書き方に工夫が必要かも。
SQLでミスをなくすにはクォーテーションにはシングルクォーテーション
をつかうことです。
そうすればPHPでよくつかうダブルクォーテーションと競合せず
無駄なエスケープがへります。
(逆よりは汎用性があがるでしょう)
投稿日時 - 2008-12-15 11:11:39
お礼
ご回答ありがとうございます。
ご教授通りテーブル設計・SQL内のシングルクォーテーション
等試してみましたが、未だに同様の現象が発生してしまいます・・・
投稿日時 - 2008-12-16 10:51:38