如何根据 PHP PDO 中的经度、纬度和半径从 MYSQL 中提取数据?

How can I pull data from MYSQL based on Longitude, Latitude and radius in PHP PDO?

我正在开发一个应用程序,它需要根据人的经度、纬度和用户选择的半径显示结果,然后 return Json 数组格式的结果 json_encode();

我的项目中有 3 个文件,分别是 sdbconnection.phpmanipulate.php pull.php。下面我解释了每个文件是如何工作的。

sdbconnection.php 是我的服务器和数据库连接。

//MySQL Database Connection Credential
class connection {
    public static $host = "XXXXX";
    public static $user = "XXXXXXX";
    public static $password = "XXXXXXX";
    public static $database = "XXXXXXX";
    public static $port = "XXXXX";
}

manipulate.php 是我执行 SQL 查询和 return 结果的方式。我试图弄清楚如何从 google tutorial 发送请求,但我相信我遗漏了一些东西,因为他们没有使用 PDO 连接。

public function pullResults($longitude, $latitude, $radius){
    $retunValue = array();
    $sql = "SELECT title, latitude, longitude, ( 3959 * acos( cos( radians(:lat) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(:lng) ) + sin( radians(:lat) ) * sin( radians( latitude ) ) ) ) AS distance FROM posts HAVING distance < :radius ORDER BY distance LIMIT 0 , 20";

    $result = $this->connection->query($sql);
        if ($result != null && (mysqli_num_rows($result) >= 1)) {
            $row =  $result->fetch_array(MYSQLI_ASSOC);
            if (!empty($row)) {
                $retunValue = $row;
            }
        }

    return $retunValue;
}

pull.php 是用户请求执行响应的地方,当我在浏览器中尝试时,我得到 Blank 页面.

//Database Connection and Query Manipulation.
require("handles/sdbconnection.php");
require("handles/manipulate.php");

// Get parameters from URL
$latitude = $_GET["latitude"];
$longitude= $_GET["longitude"];
$radius = $_GET["radius"];
$category = htmlentities($_GET["category"]);

//Connect to database
$databaseAccess = new manipulate();
$databaseAccess->openConnection();

//Get the Result
$databaseAccess->pullResults($longitude, $latitude, $radius);

//Close Connection After Data Pulled
$databaseAccess->closeConnection();

此外,如果您看到了,我正在尝试通过提供多个类别 ($category = htmlentities($_GET["category"]);) 来检索数据,从而使我的 MYSQL 查询更加具体,如果您告诉我如何操作,我将不胜感激也这样做。

程序:

"PDO" 和 "mysqli_*" 是两个独立的 API。不要混用。

pullResultsreturn $retunValue;,但对它的调用会丢弃 return 值。

$string = json_encode($retunValue);

将生成一个字符串,您可以 echo 将其放入结果中。

"platform" 是否期待 HTML 输出?或者只是 JSON 文本?如果是后者,您需要将此作为发出输出的 first 语句:

header('Content-Type: application/json');

底线:这可能就是您所需要的:

header('Content-Type: application/json');
echo json_encode($retunValue);

(其他问题我没查过)