[英]PHP SQL st_within
當我在phpMyAdmin中運行此查詢時,它將起作用:
set @lat= xxxxxx;
set @lon = -xxxxxx;
set @dist = xxxx;
set @rlon1 = @lon-@dist;
set @rlon2 = @lon+@dist;
set @rlat1 = @lat-@dist;
set @rlat2 = @lat+@dist;
select * from person where st_within(point(longitude, latitude), envelope(linestring(point(@rlon1, @rlat1), point(@rlon2, @rlat2))))
它給了我在這些邊界內的點的列表,但是如果我從php文件運行它:
<?php
if (isset($_GET['latitude']) && isset($_GET['longitude']) && isset($_GET['radius'])) {
$lat = $_GET['latitude'];
$lon = $_GET['longitude'];
$dist = $_GET['radius'];
$rlon1 = $lon-$dist;
$rlon2 = $lon+$dist;
$rlat1 = $lat-$dist;
$rlat2 = $lat+$dist;
require_once __DIR__ . '/db_connect.php';
$db = new DB_CONNECT();
$db->connect();
$sql = "SELECT *FROM person WHERE st_within(point(longitude, latitude), envelope(linestring(point('rlon1', 'rlat1'), point('rlon2', 'rlat2'))))";
$row = $db->query($sql);
if ($row != null) {
// looping through all results
// persons node
$response["persons"] = array();
while ($result = mysqli_fetch_array($row)) {
// temp user array
$person = array();
$person["name"] = $result["name"];
$person["latitude"] = $result["latitude"];
$person["longitude"] = $result["longitude"];
// push single person into final response array
array_push($response["persons"], $person);
}
// success
$response["success"] = 1;
// echoing JSON response
echo json_encode($response);
} else {
// no persons found
$response["success"] = 0;
$response["message"] = "No persons found";
// echo no users JSON
echo json_encode($response);
}
}
?>
我得到這個:
{"persons":[],"success":1}
如果我運行:$ sql =“ SELECT * FROM person”從php文件中起作用。
這個php版本的st_within有問題嗎?
PHP版本5.5.12 SQL 5.6.17
$sql = "SELECT *FROM person WHERE st_within(point(longitude, latitude), envelope(linestring(point('rlon1', 'rlat1'), point('rlon2', 'rlat2'))))";
好像您缺少美元符號。
嘗試替換為$ rlon1 / $ rlat1 / $ rlon2 / $ rlat2:
$ sql =“ SELECT *從某人那里st_within(point(經度,緯度),信封(linestring(point('$ rlon1','$ rlat1'),point('$ rlon2','$ rlat2'))))) “;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.