2017-10-21 75 views
0

我在VARCHARmysqli的不和PHP日期工作

enter image description here

和值 「21/10/2017」

enter image description here

現在,當嘗試用 「數據」 列的表一個查詢如:

$data = mysqli_real_escape_string($bd, date("j/m/y"));  
     $result = mysqli_query($bd, "SELECT * FROM tracking where data='".$data."'"); 

此查詢返回0,但如果用像「狗」這樣的隨機字符串來更改數據,並用狗替換mysql中的數據,查詢工作正常,但我需要的日期不是狗。

如果使用$data = "21//10//2017"; thw查詢工作爲什麼?

+3

也許存儲它作爲日期類型,而不是varchar – Akintunde007

+0

這是一個正常的字符串,爲什麼如果字符串等於「21/10/2017」不起作用?如果它不是日期並且是連續的?我需要使用序列號的日期? –

+0

如果使用$ data =「21 // 10 // 2017」; thw查詢工作爲什麼? –

回答

1

我看到您使用j/m/y,根據date手冊y返回年份與最後2位數字,而不是4位數字,因爲你期望,所以用Y來代替。

但說實話,您必須在date,datetimetimestamp類型中存儲日期,而不是在varchar中。

+0

非常感謝=) –

+0

@ user1598430您很容易地將它送出。 Op從來沒有通過查看輸出來查看它是錯誤的格式。 – TimBrownlaw

+0

@TimBrownlaw至少他知道官方文檔在哪裏。 – user1597430

1

您在date中使用了錯誤的date format。您獲得的日期格式爲j/m/y,其格式爲d/mm/yy21/10/17,但數據庫中的日期/字符串格式爲dd/mm/yyyy

爲了讓年滿4位數的版本,你需要使用Y代替y,即

$data = mysqli_real_escape_string($bd, date("j/m/Y")); 

注意:您可能也有月份和日期格式錯誤 - 你正在使用的PHP中的單位數字日期和2位數月份表示(例如1/01/17而不是01/01/17),但是您的字符串可能使用完整的2位數字 - 我們不能在日期示例中說明......您需要的情況:

$data = mysqli_real_escape_string($bd, date("d/m/Y")); 
+0

這只是您使用日期而不是字符串的一個原因 - 您不必匹配搜索它們的格式。其他原因是您無法按日期排序,搜索日期範圍,更改國際展示的格式,或者基本上只對日期進行任何操作,而不是完全按照原樣顯示。 – FluffyKitten

+0

非常感謝=) –

+0

@ J.DoeCd不要忘記你的日月格式也可能是錯誤的,就像我在我的回答中提到的那樣。 'j/m/Y'格式適用於2017年2月21日的例子,但它不適用於2017年10月1日的 – FluffyKitten