[英]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::Prepare
和PDO::bindValue
对于设置为使用BETWEEN
和INET_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.