0

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

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

2 回答 2

2

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

于 2013-10-25T18:09:46.187 回答
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);
于 2013-10-25T18:06:32.727 回答