2013-04-25 141 views
0

我有一個SQL DB,我根據日期和時間存儲信息。PHP搜索SQL DB日期

格式的SQL存儲是2013年4月25日15時13分37秒

列名是DATE_TIME,是無功

我的搜索PHP是如下:

<form action="control_lbsresult.php" method="get"> 
       <input type="hidden" name="member_msisdn" value="<?=$query?>" 
/> 
       <input type="text" name="query" /> 
       <br /> 
       <label for="dates"></label> 
       <input type="date" name="dates" id="dates" /> 
       Start Date<br /> 
       <label for="datee"></label> 
       <input type="date" name="datee" id="datee" /> 
       End Date<br /> 
       <input type="submit" value="Search" /> 
      </form> 

這是它給出URL字符串

/control_lbsresult.php?member_msisdn=&query=0827910119&dates=2013-04-01&datee=2013-04- 
25 

這就是我在我的結果頁面:

<?php 
$host="localhost"; // Host name 
$username="***"; // Mysql username 
$password="****"; // Mysql password 
$db_name="****"; // Database name 
$tbl_name="lbs_"; // Table name 

// Connect to server and select database. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// get value of id that sent from address bar 
$id=$_GET['id']; 

// Retrieve data from database 
$sql="SELECT * FROM $tbl_name WHERE date between '" . $dates . "' AND '" . $datee . "'  
msisdn='$msisdn'"; 

這不是日期間過濾對我,給我的MSISDN

我認爲這個問題是在WHERE字符串,請協助

+2

如果您的日期作爲字符串存儲MySQL不會把他們當作日期。您應該將該數據類型更改爲datetime。 – 2013-04-25 15:46:26

+4

[**請不要在新代碼**中使用'mysql_ *'函數](http://bit.ly/phpmsql)。他們不再被維護[並且被正式棄用](http://j.mp/XqV7Lp)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。 – Kermit 2013-04-25 15:46:37

+0

'$ date'和'$ datee'沒有在代碼中的任何位置定義,'msisdn'部分也會在SQl中導致語法錯誤。 – 2013-04-25 15:51:40

回答

0

使用BETWEEN的日期可以得到所有的結果你意外的rsults。試試這個:

SELECT * 
FROM $tbl_name 
WHERE date >= '" . $dates . "' 
AND date <= '" . $datee . "' 
+0

不太可能OP會用字符串得到他們想要的結果。 – Kermit 2013-04-25 15:48:40

+0

如果值存儲在適當的日期,日期時間或時間戳字段中,則BETWEEN完全正常工作。 – 2013-04-25 15:52:03

+0

你是什麼意思「意外的結果」? 'BETWEEN'幾乎總是比'x> = y AND x <= z'好。 – tadman 2013-04-25 16:02:44

0
  1. 更改您的列的類型。

    ALTER TABLE tbl MODIFY COLUMN日期datetime;

  2. 使用BETWEEN

1

使用BETWEEN>= & <=,兩者都應該工作。

您需要確保字段類型爲DATE

此外,我會建議使用mysqli。

下面是示例代碼爲您提供:

$stmt = $db->prepare("SELECT * FROM tbl_name WHERE date_field between ? AND ?"); 

$stmt->bind_param("ss",$start_date,$end_date); 

$stmt->execute();