PDO Execute 将 Bind Integer 参数显示为字符串

Gra*_*avy 5 php pdo

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;
}
Run Code Online (Sandbox Code Playgroud)

我可以通过手动注入/连接 sql 语句来解决这个问题 - 这不是我想要做的。

ORDER BY MONTH(DateStamp) LIMIT ' . $numMonths
Run Code Online (Sandbox Code Playgroud)

但是有没有办法将 :numMonths 直接转换为 int 点$stmt->execute();

x4r*_*f41 6

来自有关执行数组参数的文档:

一个值数组,其元素数量与正在执行的 SQL 语句中的绑定参数数量相同。所有值都被视为 PDO::PARAM_STR。

在执行之前使用类似的东西:

$stmt->bindValue(':numMonths', intval($months), PDO::PARAM_INT);
Run Code Online (Sandbox Code Playgroud)