2012-10-25 122 views
0

我嘗試獲取一組ID的是由於在接下來的7天內到期,以及對我的生活不能得到我的查詢工作MySQL查詢發現日期小於其他日期

$target_date = date('Y-m-d', strtotime('+7 days')); 
    $sql = "SELECT subscriptions.`id` FROM subscriptions WHERE date($target_date) <= expires AND cust_id =$_SESSION[uid]"; 

任何將不勝感激

+0

你存儲的日期作爲時間戳或Unix時間戳,我這麼問是因爲我看到了這裏:'的strtotime('+ 7天)' –

回答

1

這是罰款:

$target_date = date('Y-m-d', strtotime('+7 days')); 

由於它的結構以相同的方式將日期作爲MySQL的[YYYY-MM-DD]

我已經關掉您的查詢各地和應用DATE()功能的「過期」字段和不是你$target_date,因爲它並不需要。您的到期場可能會在[YYYY-MM-DD HH:MM:SS]格式,這可能是爲什麼它不工作:

$sql = " 
SELECT subscriptions.id 
FROM subscriptions 
WHERE DATE(expires) >= '$target_date' 
AND cust_id = '$_SESSION[uid]'"; 

回聲出$sql查詢,以找出是否其正常運行,並使用or die(mysql_error());告訴你在哪裏它的失敗。

使用SQL轉義過(無論是PDO或mysqli的),如已在另一個答案被列出。

希望這會有所幫助。

+0

感謝所有誰回答說,這個整理我的問題,也感謝tadman,看起來英迪SQL逃逸 –

1

如果您創建一個大致MySQL兼容格式的日期,它應該工作,而不必使用DATE函數,只是比較它就好像它是一個字符串。

你的代碼是迫切需要的一些適當的SQL escaping會解決這個問題,可能是一個令人擔憂的大量其他的應用程序中。

在PDO查詢運行或mysqli將大致如下:

$target_date = date('Y-m-d', strtotime('+7 days')); 
$sql = "SELECT subscriptions.`id` FROM subscriptions WHERE ?<=expires AND cust_id=?"; 

然後,您可以調用相應的bind_param方法在正確的價值觀鏈接到這些佔位符。

1

您可以與MySQL做到這一點:

SELECT subscriptions.`id` FROM subscriptions WHERE date_add(curdate(),interval 7 day) <= expires AND cust_id =$_SESSION[uid]