PHP PDO与MySQL之间和INET_ATON()的使用


PHP PDO usage with MySQL BETWEEN and INET_ATON()

我不久前开始了一个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);
    }
}

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

你的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就会很高兴地把你想要的东西塞进你想要的任何地方。"

相关文章:
  • 没有找到相关文章