0

不久前我开始了一个 PHP 端项目,最近开始清理所有代码并更新它。部分原因是开始使用 PDO 进行 DB 查询。在一个特定的查询中,我有一个WHERE使用该BETWEEN子句和INET_ATON()函数的子句语句。到目前为止,我还不能让它正常工作,如果有人能指出它是否能正常工作,我将不胜感激。

我发现这个问题让我相信该BETWEEN语句没有任何问题,但我担心这可能是与导致问题的函数的组合。

这是我查询的那部分的样子:

SELECT foo, bar FROM table JOIN more_table 
WHERE item1 = :value AND ip_address BETWEEN INET_ATON(:ipstart) AND INET_ATON(:ipend)

实际的查询比这要大得多,但对于基础来说,这是可行的。为了用实际值替换标记,我设置了以下 foreach 循环(var_dump就在那里,所以我可以验证正确的值正在传入,它们是):

foreach($p as $k=>$v) {
    echo var_dump($k, $v);
    if(is_int($v)){
        $querySubmit->bindValue($k, $v, PDO::PARAM_INT);
    } else {
        $querySubmit->bindValue($k, $v, PDO::PARAM_STR);
    }
}

如果有人知道设置为使用 and 的查询是否有任何限制PDO::Prepare,我将不胜感激!PDO::bindValueBETWEENINET_ATON()

4

2 回答 2

0

问题最终出现在一段单独的代码中。传递给 SQL 查询的值是正确的,并且bindValue操作成功。

对于将来审查此问题的任何人,如果他们认为自己遇到类似问题,如果设置正确,INET_ATON/NTOA()使用BETWEEN.

我相信@MarcB 留下的第一条评论实际上可能是对此的最佳答案,“PDO 对 MySQL 函数一无所知。只要 MySQL 解析器不拒绝查询字符串,PDO 就会很乐意加入任何内容你想要的,你想要的任何地方。”

于 2013-01-14T14:31:57.600 回答
0

你的参数 应该bindValue()$k:value

foreach($p as $k=>$v) {
    echo var_dump($k, $v);
    if(is_int($v)){
        $querySubmit->bindValue(:value, $v, PDO::PARAM_INT);
    } else {
        $querySubmit->bindValue(:value, $v, PDO::PARAM_STR);
    }
}

:ipstart你也有约束力:ipend吗?

于 2013-01-11T17:14:02.870 回答