php - Zend Framework 改变 MySQL 结果?

标签 php mysql zend-framework

所以我有一个 MySQL 数据库,其中包含美国境内的城市/县以及经度和纬度。

这是我们用来获取此示例中任何位置 10 英里以内结果的查询。

SELECT city, state,((ACOS(SIN('38.2966016' * PI() / 180) * SIN(lat * PI() / 180) + COS('38.2966016' * PI() / 180) * COS(lat * PI() / 180) * COS(('-77.634079'-lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance FROM zcta HAVING distance <= '10' ORDER BY distance ASC

当在 Sequel Pro 中测试结果按预期返回时:

Fredericksburg      VA  4.5932632328546
Spotsylvania        VA  6.1939678870939
Richardsville       VA  6.8293644913069
Locust Grove        VA  7.6479616882979
Hartwood            VA  7.6509448009002
Fredericksburg      VA  7.8178182509761
Fredericksburg      VA  7.8328645163604
Fredericksburg      VA  7.8499527233007
Fredericksburg      VA  7.8832043684573
Fredericksburg      VA  8.8620101042208

但是当插入到以下 Zend Framework 中时:

    $db = $this->getAdapter();
    $sql = "SELECT city, state,((ACOS(SIN('38.2965709' * PI() / 180) * SIN(lat * PI() / 180) + COS('38.2965709' * PI() / 180) * COS(lat * PI() / 180) * COS(('-77.6340366'-lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `zcta` HAVING `distance`<='10' ORDER BY `distance` ASC";
    //$sql = "SELECT city, state,((ACOS(SIN('".$lat."' * PI() / 180) * SIN(lat * PI() / 180) + COS('".$lat."' * PI() / 180) * COS(lat * PI() / 180) * COS(('".$lon."'-lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `zcta` HAVING `distance`<='10' ORDER BY `distance` ASC";
    $stmt = $db->query($sql);
    $rows = $stmt->fetchAll();
    return $rows;

我们得到结果(关闭订单)

Champlain, VA
Hustle, VA
Caret, VA
Tappahannock, VA
Loretto, VA

距离弗吉尼亚州尚普兰超过 39 英里。这是相同的查询,我什至在 shell 中对其进行了测试,并得到了与 Sequel Pro Fredericksburg 结果相同的结果。因此,我假设 Zend Framework 在查询数据库时发生了一些变化,因此是弗吉尼亚州尚普兰的结果。

我是 ZF 的新手,我是否缺少让 ZF 正确返回结果的东西?

最佳答案

从来没有听说过这个问题。您是否尝试从查询的整数/ float 中删除任何引号:

$sql = "SELECT city, state,((ACOS(SIN(38.2965709 * PI() / 180) * SIN(lat * PI() / 180) + COS(38.2965709 * PI() / 180) * COS(lat * PI() / 180) * COS((-77.6340366-lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `zcta` HAVING `distance`<=10 ORDER BY `distance` ASC";

关于php - Zend Framework 改变 MySQL 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5006052/

相关文章:

php - 通知 : Unknown: Skipping numeric key 1 in Unknown on line 0

php - 按最后一个字符拆分字符串并保存到数组?

php - 嵌套的 foreach 循环,使用 php 和 laravel

mysql - 使用 MySQL ORDER BY 选择范围

php - 如何从 URL 中检索值?

php - 来自多个类别的项目最佳实践

php - 如何将 WordPress 子站点从临时服务器迁移到实时服务器(在 WordPress 多站点上)?

php - 如何生成像 'xxx0000' , 'xxx0001' 这样的 id 号?

mySQL 从类别及其子类别中选择项目

php - 引导后访问 Zend 应用程序 Bootstrap _init 函数