使用函数传递经过净化的输入不起作用


Passing sanitized input with function does not work

过去几天我一直遇到问题,我已经缩小了问题范围,如下所示。 如果我不将其与自定义距离函数一起使用,则参数的传递工作正常。 谁能告诉我我做错了什么? 截至目前,我只是手动清理字段并将其硬编码到查询中。

作品(返回正确的结果):

$sth = $db->prepare("SELECT * FROM providers WHERE distance('42.8','-73.9',lat,lon)<25");
$sth->execute();

不起作用(返回所有提供程序):

$sth = $db->prepare("SELECT * FROM providers WHERE distance('42.8','-73.9',lat,lon)<:radius");
$sth->execute(array(":radius" =>25));

我对 PDO 并不熟悉,但可能是因为您正在传递一个int并且该语句默认将值视为string。 请参阅手册页:http://php.net/manual/en/pdostatement.execute.php 并在input_parameters下查看更多信息。 在执行语句之前,您始终可以尝试使用 bind_param() 将数据转换为正确的类型。

试试这段代码:我自己对PDO有点陌生,但我发现这对我有用:

$radius = 25;
$sth = $db->prepare("SELECT * FROM providers WHERE distance('42.8','-73.9',lat,lon)<:radius");
$query_params = array( 
        ':radius' => $radius
    ); 
$sth = $db->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); // forgot
$sth -> execute($query_params);