gpt4 book ai didi

php - 如何正确引用 PDO::Execute 中的 inet 值?

转载 作者:行者123 更新时间:2023-11-29 12:00:17 24 4
gpt4 key购买 nike

以下作品:

$db=$this->database;


$query="SELECT blacklisted FROM userip_blacklist "
. "WHERE ip_addr <<= inet "
. $db->quote($IP);

$result=$db->query($query);

这不是:

$query='SELECT code FROM userip_greylist WHERE user_id = ? '
. 'AND ip_addr <<= inet ? '
. 'AND expires > now()' ;
$queryvars=array($id,$ip);
$sth=$db->prepare($query); // This still works
$result=$sth->execute($queryvars); // This generates the error.

我在日志中看到了这个:

ERROR:  syntax error at or near "$2"
LINE 1: ...dr FROM trusted_ips WHERE user_id=$1 AND ip_addr <<= INET $2

我知道我可能遗漏了一些明显的东西,但是什么?

最佳答案

此语法在类型名称后跟字符串值(例如 inet '10.0.0.1'interval '10 days',称为 type 'string' in the manual ) 不能在准备好的语句中分解,类型是查询的一部分,值是参数。这是此特定语法的限制。

通用解决方案是使用显式cast 代替:

$query='SELECT code FROM userip_greylist WHERE user_id = ? '
. 'AND ip_addr <<= ?::inet '
. 'AND expires > now()' ;

并将 IP 地址作为字符串文字参数传递。

如果您觉得它更具可读性或更标准,它也可以写成 CAST(? AS inet)

关于php - 如何正确引用 PDO::Execute 中的 inet 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21532272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com