2016-05-03 84 views
-3

我正在使用php5 +和MySQL。爲什麼我的「where條件」與數字不起作用?

我想不通爲什麼我的操作是不工作:

$prepare = $bbd->prepare('SELECT cm.cm_values FROM c_metas as cm WHERE cm.cm_name = "inscription" AND cm.cm_values > :specific_date'); 
$prepare->execute(array(':specific_date' => $date)); 

隨着使用fetchall,這給了我在cm_name「申遺」的所有條目。 在另一方面:

$prepare = $bbd->prepare('SELECT cm.cm_values FROM c_metas as cm WHERE cm.cm_name = "inscription" AND cm.cm_values > '.$date.' '); 
$prepare->execute(); 

完美返回cm_name並用「cm_values」優於$日期「申遺」項目...

我想不出什麼我做錯了?

THX對您有所幫助,並原諒我的英語...

編輯:我使用時間戳存儲日期,所以$日期是數值。

再次編輯:如評論所述,我的參數格式有問題。喜歡的東西

$prepare = $bbd->prepare('SELECT cm.cm_values FROM c_metas as cm WHERE cm.cm_name = "inscription" AND cm.cm_values > :specific_date'); 
$prepare->bindParam(':specific_date', $date, PDO::PARAM_INT); 
$prepare->execute(); 

作品...所以我現在必須得到如何使它工作在執行()...

+0

我想在第二個例子中比較'strings'而不是'dates'。 'c_metas'可能是包含'cm_values'列的EAV表格作爲文本。嘗試:'WHERE CAST(cm.cm_name AS DATE)>' – lad2025

+0

我實際上使用時間戳(oldschool,我知道)所以specific_date,$ date是數字。 – Vae

回答

0

其實,

$prepare = $bbd->prepare('SELECT cm.cm_values FROM c_metas as cm WHERE cm.cm_name = "inscription" AND cm.cm_values > :specific_date'); 
$prepare->bindValue(':specific_date', $date, PDO::PARAM_INT); 
$prepare->execute(); 

固定了整個事情。 Thx爲你的答案夥計。

0

:specific_date」是一個字符串,你要調用一個變量$date 。他們是不同的東西,所以他們變成了不同的結果。

+0

我不明白。 :specific_date應該通過execute()引用$ date,不是嗎? (順便說一句,我使用時間戳,所以我的日期是數字) – Vae