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