2017-09-01 68 views
0

在我的MySQL數據庫中,我有許多記錄,格式爲08/31/2017等格式,在MySQL列中保存爲「文本」。MySQL日期選擇查詢不起作用

在我的HTML & PHP腳本,我使用所有這些日期,通過使用下面的腳本工作正常在HTML下拉菜單中選擇,我將其保存在

<select name='day'> 

,並在我的PHP腳本,我使用下面如果沒有初始設置,選擇日期..

$day = isset($_GET['day']) ? $_GET['day']:'08/31/2017'; 

在MySQL查詢,我使用以下和查詢不工作..

$result=$dbconnect->query("SELECT * FROM testtable where (`HR` = $hr and `DAY` = $day) ORDER BY `HR` DESC"); 

請幫究竟是不是right..my腳本工作正常,如果我不使用在查詢日期..

+1

1)您需要使用您當前的查詢構建方法引用$ day。但2)你真的應該逃避任何不安全的輸入。 – trex005

+1

** 1st:**將日期保存爲日期而不是文本 – JYoThI

+1

@ trex005參數綁定>轉義 – Phil

回答

0

嘗試增加引號(')圍繞在您的查詢的$day變量,因爲它是一個字符串值,

做象下面這樣: -

$result=$dbconnect->query("SELECT * FROM testtable where (`HR` = $hr and `DAY` = '$day') ORDER BY `HR` DESC"); 
+0

嘗試提供一些有用的答案,而不僅僅是語句。 –

+0

太棒了......這是正確的答案:) – Syed

0

更改數據類型爲date在MySQL的日期項.. 然後在你的PHP代碼,請執行以下操作:

$date1 = date_create($_GET['day']); 

$date = date_format($date1, 'm/d/Y'); 

然後將它傳遞給您的查詢。

而使用預處理語句強烈建議

0

嘗試此查詢

SELECT * FROM testtable where (`HR` = $hr and `DAY` = DATE('$day')) ORDER BY `HR` DESC 
0

問題在於SQL查詢,這樣$小時,$一天需要通過逃脫包圍引號。

請注意,您不應該信任用戶提供的數據。對付這樣的數據的一種方法是使用準備好的語句,以避免SQL注入,但應該仔細考慮其使用的每Manual

使用事先準備好的聲明並不總是 執行最有效的方法聲明。準備好的語句只執行一次導致 更多的客戶端服務器往返比非準備語句。

儘管如此,每OWASP

在極少數情況下,預處理語句可能會損害性能。當 遇到這種情況時,最好是a)強烈地 驗證所有數據或b)使用特定於您的數據庫供應商的 轉義程序(如下所述) 而不是使用預處理語句轉義所有用戶提供的輸入。

所以,你應該確認數據,然後在最低限度,用mysqli_real_escape_string如下:

<?php 
$hr = mysqli_real_escape_string($con, $_GET['hr']); 
$day = mysqli_real_escape_string($con, $_GET['day']); 

然後,逃避引號包含變量$小時,$一天的查詢,如如下:

$sql = "SELECT * FROM `date_hr` WHERE (HR=\"$hr\" and date=\"$day\") ORDER BY HR DESC"; 

$result = $dbconnect->query($sql);