mysql查询语句里如何使用PHP变量?

代码如下:

SELECT
    ROUND(
        6378.138 * 2 * ASIN(SQRT(POW(
            SIN((纬度 * PI() / 180 - substring_index(maps, ",", - 1) * PI() / 180) / 2),2) +
            COS(纬度 * PI() / 180) * COS(substring_index(maps, ",", - 1) * PI() / 180) * 
            POW(SIN((经度 * PI() / 180 - substring_index(maps, ",", 1) * PI() / 180) / 2),2))
        ) * 1000
    ) 
FROM list
ORDER BY distance asc

问题一:上面代码里的经度和纬度是获取用户当前位置的经纬度,我在外面写了个百度提供的接口通过IP地址获取经纬度,分出来两个变量一个是$lat一个是$lng,请问我该如何把这两个变量替换上面代码里的经度和纬度呢?

问题二:还有就是我通过下面代码获取用户IP

function getIP(){
        global $ip;
        if (getenv("HTTP_CLIENT_IP"))
        $ip = getenv("HTTP_CLIENT_IP");
        else if(getenv("HTTP_X_FORWARDED_FOR"))
        $ip = getenv("HTTP_X_FORWARDED_FOR");
        else if(getenv("REMOTE_ADDR"))
        $ip = getenv("REMOTE_ADDR");
        else $ip = "Unknow";
        return $ip;
    }

$content = file_get_contents("http://api.map.baidu.com/location/ip?ak=akid&ip=IP地址&coor=bd09ll");
我应该怎么把getIP()这个方法写在上面IP地址的位置呢?让它能成功解析IP地址呢?非常感谢!~

阅读 3.4k
3 个回答

谢邀。

$lat$lon直接替换到上面拼接字符串即可。

你的sql查询语句在php中使用,自然需要拼接sql语句,把sql当成一个字符串,拼接好之后再query即可。

另外,要看你的经纬度是什么格式,是XXX°XXX′xxx″形式还是11231.123形式,前者不支持运算,需要转后者。

其次不建议在数据库查询的时候使用计算,你上面sql中的计算完全可以在php中计算完,直接 查询计算的结果。

第四,初步感觉你的sql有问题,sql直接查询数据,而不是select field from table where xxx = xxx order ,你select的直接select了一个数据。比如 select 1 from table ..

第二个问题拿到ip之后拼接到里面的字符串即可,一样的道理。

最简单的 用点运算符"."进行字符串拼接啊

使用prepre绑定(推荐), 如下:

$stmt = $pdo->prepare('select * from actor where actor_id = ?'); // 用?代夫要插入的值, 不需要加引号

$stmt->execute(['问号所代替的变量, 问题顺序提供']);

var_dump($stmt->fetchAll());

直接使用PHP变量内插. 在这儿注意把经纬度转成浮点.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题