PDO似乎在准备好的sql语句中自动为绑定参数添加引号。
当我试图限制结果数量时,我不想要这个功能,因为这应该被视为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
但是有没有办法将:numMonths直接转换为$stmt->execute();
处的int?
答案 0 :(得分:4)
来自有关execute array param的文档:
具有与绑定参数一样多的元素的值数组 在正在执行的SQL语句中。所有值均视为 PDO :: PARAM_STR。
在执行之前使用类似的东西:
$stmt->bindValue(':numMonths', intval($months), PDO::PARAM_INT);