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