我不久前启动了一个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::Prepare
和PDO::bindValue
对查询设置为使用BETWEEN
和INET_ATON()
是否有任何限制,我将非常感谢您!
答案 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就会很高兴无论你想要什么,都可以随时随地推动。“