首页 > 解决方案 > 如何在 mysqli_query [PHP] 中包含数学?

问题描述

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) 
* cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin(radians(lat)) ) ) AS distance 
FROM markers 
HAVING distance < 25 
ORDER BY distance 
LIMIT 0 , 20;

MySQL 大圆距离(Haversine 公式)

我目前正在尝试在我的 php 代码中使用此查询,但我不确定如何在 mysqli_query 中成功实现它。

    $query = "SELECT FROM MyTable, (3959 * acos(cos(radians(37)) * cos(radians(TableLat)) * cos(radians(TableLng) - radians(-122)) + sin(radians(37)) * sin(radians(TableLat)))) 
    AS distance 
    HAVING distance < 25 
    ORDER BY distance 
    LIMIT 0 , 20";

    $stmt = mysqli_query($connectionInfo->conn, $query);

    if (!$stmt)
    {
        echo $connectionInfo->conn->error;
    }

这显然不起作用,因为所有与数学相关的东西都嵌套在“”中。尝试创建查询时如何绕过这个?

错误信息:

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的 'FROM MyTable, (3959 * acos(cos(radians(37)) * cos(radians(Lat)) * cos(radi' 附近使用正确的语法

标签: phpmysqlsql

解决方案


您的语法有错误 FROM 在字段之前:

$query = "SELECT (3959 * acos(cos(radians(37)) * cos(radians(TableLat)) * cos(radians(TableLng) - radians(-122)) + sin(radians(37)) * sin(radians(TableLat)))) 
AS distance 
FROM MyTable
HAVING distance < 25 
ORDER BY distance 
LIMIT 0 , 20";

推荐阅读