2013-06-25 29 views
2

PDO似乎在準備好的sql語句中自動將引號添加到綁定參數中。PDO執行似乎是以字符串形式綁定整數參數

我不想要這個功能,當我試圖限制結果的數量,因爲這應該被看作是一個整數到MySQL。

function fixStatistics($metal, $currency, $months){ 
$db = connectPDO(); 
$sql = ' 
     SELECT [COLUMN NAMES] 
     FROM [TABLE NAMES] 
     WHERE [WHERE STUFF] 
     GROUP BY `Month` 
     ORDER BY MONTH(DateStamp) LIMIT :numMonths 
'; 

$stmt = $db->prepare($sql); 
$stmt->execute(
     array(
     ':metal' => $metal, 
     ':currency' => $currency, 
     ':numMonths' => $months // Problem Code 
    ) 
); 
$statistics = $stmt->fetchAll(PDO::FETCH_ASSOC); 
return $statistics; 
} 

我可以通過手動注入/連接sql語句來解決此問題 - 不是我想要做的。

ORDER BY MONTH(DateStamp) LIMIT ' . $numMonths 

但有鑄造的一種方式:在$stmt->execute();點直接NUMMONTHS爲int?

回答

2

從關於執行陣列PARAM文檔:

值與儘可能多的元件的陣列,因爲結合參數 在SQL語句被執行。所有的值都被視爲 PDO :: PARAM_STR。

使用這樣的事情之前執行:

$stmt->bindValue(':numMonths', intval($months), PDO::PARAM_INT); 
+0

請不要回答重複的號碼完全相同。如果您覺得缺失,請在現有問題中添加答案。 – hakre

+0

標記爲副本獲得一個沒有聲望點。 –

+0

@hakre - 對於某些Google查詢,此問題的排名高於原始問題。如果重複項不會被刪除,那麼他們肯定應該回答? – colincameron