使用功能传递已清理的输入不起作用

时间:2013-10-25 18:01:38

标签: php sql pdo

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

WORKS(返回正确的结果):

$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));

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

试试这段代码: 我自己对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);