使用插入值数组传递PDO :: PARAM_INT时出现问题

时间:2011-07-06 15:09:51

标签: php pdo

我遇到一个问题,PDO使用引号封装int值,然后使查询失败。

这是代码(使用包装函数)

$newest = query("SELECT id, body, upvotes, downvotes 
                FROM suggestions ORDER BY timestamp DESC LIMIT :min, :max",
    array(
        ':min' => $min,
        ':max' => $max
    )
);

这是导致错误的错误查询(注意LIMIT值周围的引号)

SELECT id, body, upvotes, downvotes FROM suggestions ORDER BY timestamp DESC LIMIT '0' , '50'

我传递了一系列值:

array(
    ':min' => $min,
    ':max' => $max
)

它们都是INT,从我在互联网上读到的内容,PDO应该自动找到它并在绑定它们时使用PDO::PARAM_INT。问题是它实际上并没有这样做,因为我传递它们的唯一方法是通过一个数组,我想问一下是否有办法迫使它们PDO::PARAM_INT而不必使用{{1 }}

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您使用包装器而无法使用bindParam,则可以执行以下操作:

$min=(int)$min;
$max=(int)$max;
query("SELECT id, body, upvotes, downvotes 
                FROM suggestions ORDER BY timestamp DESC LIMIT $min, $max");

这不是最好的主意。如果你想保持标准,你应该改进你的包装来处理这种情况。

喜欢在你的包装器中添加第三个参数

function query($q,$paramArray,$bindParamArray) {}

所以你也可以有效地使用bindParam