2016-07-08 27 views
1

まあ私はこれらの2つのステートメントを持っています。 セキュリティリスクを無視する(SQL INJECTION) ユーザーは、この形式の日付を2016-7-9で入力します。どのようにして取得し、私はselect文が動作しないよう$time1$time2がこの形式であるPHP MYSQLの日付形式

$sql = "SELECT DISTINCT msisdn FROM customer WHERE time_paid BETWEEN ADDDATE('$time1',INTERVAL 0 HOUR) AND ADDDATE('$time2',INTERVAL '23:59' HOUR_MINUTE)"; 

で試してみたので、日付を変更することができます。私は間違っている可能性がありますが、私はそれがこの形式の2016-01-12に期待していると思いますか?

これは動作します:

$sql = "SELECT DISTINCT msisdn FROM customer WHERE time_paid BETWEEN 2015-01-10 12:23:34 AND 2017-12-12 12:12:12"; 

誰もがどのように私は私のクエリでこのフォーマット2016年3月3日を使用できますか?

+0

あなたの 'time_paid'カラムのフォーマットは? –

+0

これは 'time_paid' DATETIME ...テーブルの –

+1

人々が「私はそれほど遠くにはない」と言ったときに嫌いです* *または「このサイトは公開されません」*それは学校のためのものなので、セキュリティは問題ではありません... "*。教師や教授が初日からのセキュリティについて話していない場合、彼らは間違っている。それらに挑戦してください。彼らは後で解読しなければならない厄介で危険なコーディング慣行を教えています。私はまた、人々が言っ​​たときにそれを嫌う* "私は後でセキュリティを追加する" *または* "セキュリティは今重要ではない..." *または "セキュリティリスクを無視する" *。あなたが最初に正しいことをする時間がなければ、後でそれを追加する時間をいつ見つけるのですか? –

答えて

1

あなたのMySQL time_paid DATETIME列の値は、あなたの制約値をこのように一致するようにフォーマット:

DATE_FORMAT(time_paid, '%Y-%c-%e') // 2016-3-3 

%Y - Four digits year e.g., 2000, 2001,…etc.

%c - Month in numeric e.g., 1, 2, 3…12

%e - Day of the month without leading zero e.g., 1,2,…31

したがって、あなたのSQLは:

$sql = "SELECT DISTINCT msisdn FROM customer WHERE DATE_FORMAT(time_paid, '%Y-%c-%e') BETWEEN ADDDATE('$time1',INTERVAL 0 HOUR) AND ADDDATE('$time2',INTERVAL '23:59' HOUR_MINUTE)"; 
+0

ちょっとちょっと私はフォーマットを挿入しますか? –

+0

答えがSQLコードで更新されました。 @BobMwenda –