PHP Prepared Statement中的问号不起作用?

时间:2014-03-29 12:46:21

标签: php mysql

我正试图在距离给定纬度和经度100米的范围内从我的数据库中获取一些位置。

我在Google网站上发现了一个允许您这样做的查询,但是当我删除查询中的变量并将其替换为您应该在准备好的声明中的问号时,它不起作用

我的查询如下:

$getLocation = $db->prepare("
        SELECT
          id, title, lat, `long`, verified, (
            3959 * acos (
              cos ( radians(?) )
              * cos( radians( lat ) )
              * cos( radians( lng ) - radians(?) )
              + sin ( radians(?) )
              * sin( radians( lat ) )
            )
          ) AS distance
        FROM markers
        HAVING distance < 0.0621371192
        ORDER BY distance
        LIMIT 1;
    ");
    $getLocation->bind_param("sss", $newLatitude, $newLongitude, $newLatitude);
    $getLocation->execute();
    $getLocation->store_result();
    $getLocation->bind_result($locId, $locTitle, $locLat, $locLong, $locVerified, $locDist);

    if($getLocation->num_rows > 0) {
        while($getLocation->fetch()) {
            echo "yes";
        }
    }
    else {
        echo "no :(";
    }

我不是准备好的陈述专家,所以请告诉我我做错了什么。

谢谢,

1 个答案:

答案 0 :(得分:0)

最后我通过将查询更改为:

来解决我的问题
$getLocation = $db->prepare("
        SELECT
          id, title, lat, `long`, verified, (
            3959 * acos (
              cos ( radians(?) )
              * cos( radians( lat ) )
              * cos( radians( `long` ) - radians(?) )
              + sin ( radians(?) )
              * sin( radians( lat ) )
            )
          ) AS distance
        FROM marker
        HAVING distance < 0.0621371192
        ORDER BY distance
        LIMIT 1;
    ");

现在工作正常。