繁体   English   中英

MySQL BETWEEN和INET_ATON()的PHP PDO使用

[英]PHP PDO usage with MySQL BETWEEN and INET_ATON()

我不久前开始了一个PHP端项目,最近开始清理并更新所有代码。 部分原因是开始使用PDO进行数据库查询。 在一个特定的查询中,我有一个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);
    }
}

如果有人知道PDO::PreparePDO::bindValue对于设置为使用BETWEENINET_ATON()的查询PDO::bindValue有任何限制,我将不胜感激!

您的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

问题最终是由单独的代码部分引起的。 传递给SQL查询的值正确,并且bindValue操作成功运行。

对于那些以后相信此问题的人,如果他们相信他们也遇到类似的问题,那么如果设置正确,将INET_ATON/NTOA()函数与BETWEEN一起使用应该不会有问题。

我相信@MarcB留下的第一条评论实际上可能是对此的最佳答案:“ PDO完全不了解MySQL函数。只要MySQL解析器不拒绝查询字符串,PDO都会乐于推销您想要的,无论您想要的是什么。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM