gpt4 book ai didi

php - 将半正矢公式与 PHP PDO 结合起来

转载 作者:行者123 更新时间:2023-11-30 01:34:33 25 4
gpt4 key购买 nike

最初使用以下查询:

SELECT username, latitude, longitude, ( 3959 * acos( cos( radians(':lat') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(':lng') ) + sin( radians(':lat') ) * sin( radians( latitude ) ) ) ) AS distance FROM users HAVING distance < '500' ORDER BY distance LIMIT 0 , 20

当我在控制台中运行它时(用实际数字替换我的 PDO 占位符(:lat、:lng 等)),但一旦我通过 PHP-PDO 运行它,即:

$stmt = db::getInstance()->prepare($sql);
$stmt->bindParam(':lat', $lat, PDO::PARAM_STR);
$stmt->bindParam(':lng', $lng, PDO::PARAM_STR);
$stmt->bindParam(':radius', $radius, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll();

它有问题并且没有返回任何内容。
问题在于 PDO 处理 HAVING 的方式显然与原始查询不同

所以没关系,我重写了查询,替换了 HAVING,新查询如下所示:

SELECT * FROM ( SELECT username, latitude, longitude, ( 3959 * acos( cos( radians(':lat') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(':lng') ) + sin( radians(':lat') ) * sin( radians( latitude ) ) ) ) ) WHERE distance < '500' ORDER BY distance LIMIT 0 , 20

这会导致 PDO 出现以下错误:

exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1248 Every derived table must have its own alias' in /home/bessr/local_html/site.com/pieces/functions/geo.functions.php:47 Stack trace: #0 /home/bessr/local_html/site.com/pieces/functions/geo.functions.php(47): PDOStatement->execute() #1 {main}

好吧,所以我给它一个别名,我修改后的查询如下所示:

SELECT * FROM ( SELECT username, latitude, longitude, ( 3959 * acos( cos( radians(':lat') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(':lng') ) + sin( radians(':lat') ) * sin( radians( latitude ) ) ) AS t ) AS alias ) WHERE distance < '500' ORDER BY distance LIMIT 0 , 20

即使我添加了别名,我仍然遇到相同的错误。我不确定我到底错在哪里。任何帮助表示赞赏。

最佳答案

您正在引用查询中的命名占位符。另外,您没有使用 :radius。以下查询删除引号并添加 :radius 适用于我的数据库。

SELECT username, latitude, longitude,
( 3959 * acos( cos( radians(:lat) ) * cos( radians( latitude ) )
* cos( radians( longitude ) - radians(:lng) ) + sin( radians(:lat) )
* sin( radians( latitude ) ) ) ) AS distance FROM users
HAVING distance < :radius ORDER BY distance LIMIT 0 , 20

关于php - 将半正矢公式与 PHP PDO 结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17079673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com