使用MySQL BETWEEN和INET_ATON()的PHP PDO用法

时间:2013-01-11 15:58:21

标签: php mysql pdo

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

我发现this问题让我相信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);
    }
}

如果有人知道PDO::PreparePDO::bindValue对查询设置为使用BETWEENINET_ATON()是否有任何限制,我将非常感谢您!

2 个答案:

答案 0 :(得分: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吗?

答案 1 :(得分:0)

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

对于将来评论此问题的任何人,如果他们认为自己遇到类似问题,如果设置正确,则INET_ATON/NTOA()函数与BETWEEN一起使用应该没有任何问题。

我相信@MarcB留下的第一条评论实际上可能是最好的答案,“PDO绝对不了解MySQL函数。只要MySQL解析器不拒绝查询字符串,PDO就会很高兴无论你想要什么,都可以随时随地推动。“