2016-07-08 65 views
1

那麼我有這兩個語句。 忽略安全風險(SQL注入) 用戶輸入2016-7-9這種格式的日期。怎樣才能獲得和修改,因爲我已經有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)"; 

$time1$time2都是這種格式,因此select語句不起作用嘗試的日期。我可能是錯的,但我認爲它期望以這種格式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 –