MYSQL:从传递2列值的表中选择:st_distance_sphere的参数不正确

MYSQL:从传递2列值的表中选择:st_distance_sphere的参数不正确,mysql,sql,Mysql,Sql,我发现了这个堆栈溢出问题 我想为我的用例实现它,但我得到了以下错误: 1210-#1210到st_距离球的参数不正确 我有一个包含以下列的数据库表: 公司目标 公司名称 城市名称 纬度 经度 露营地点类型 照片网址 如何从tbl_cc表中的每一行中提取纬度和经度,并计算出距离以米为单位小于或等于300米的结果 SELECT CompanyObjectId, CompanyName, CityName, Latitude, Longitude, CampingLocationT

我发现了这个堆栈溢出问题

我想为我的用例实现它,但我得到了以下错误:

1210-#1210到st_距离球的参数不正确

我有一个包含以下列的数据库表:

  • 公司目标
  • 公司名称
  • 城市名称
  • 纬度
  • 经度
  • 露营地点类型
  • 照片网址
如何从
tbl_cc
表中的每一行中提取
纬度
经度
,并计算出距离以米为单位小于或等于300米的结果

SELECT CompanyObjectId, CompanyName, CityName, Latitude, Longitude,
       CampingLocationType, PhotoUrl
FROM tbl_cc
WHERE st_distance_sphere(POINT(13.5145461,43.564368), POINT(Longitude, Latitude)) <= 300
在mysql admin中,它工作正常,但在php中,我收到了这个让我发疯的错误:

2019年12月16日星期一16:14:26格林尼治标准时间[错误][客户93.36.55.43]- www.testcolan.it-AH01215:PHP警告:mysqli_query():(HY000/1210): 中的st_distance_sphere的参数不正确 /web/htdocs/www.testcolan.it/home/campit/rest_api/sql/DBOperations.php 第759行: /web/htdocs/www.testcolan.it/home/campit/rest_api/getlistadovestate.php 2019年12月16日星期一16:14:26格林尼治标准时间[错误][客户93.36.55.43]- www.testcolan.it-AH01215:PHP警告:mysqli_fetch_array()需要 参数1是mysqli_结果,布尔值在 /web/htdocs/www.testcolan.it/home/campit/rest_api/GeneralFunctions.php 第242行: /web/htdocs/www.testcolan.it/home/campit/rest_api/getlistadovestate.php

我的脚本php是:

public function GetListaDoveSostare($lat, $lng, $kmmin, $ordinamentoData, $localita)
{
  $metri = (intval($kmmin) * 1000);

  $com = new DbConnect();
  $sql = "";


    $sql = "SELECT CompanyObjectId, CompanyName, CityName, Latitude, Longitude,
                  CampingLocationType, PhotoUrl, st_distance_sphere(point(".floatval($lng).",".floatval($lat)."), point(CAST(Longitude AS DECIMAL(18,14)), CAST(Latitude AS DECIMAL(18,14))), $metri) as Metri
                  FROM tbl_camper_contact
            WHERE st_distance_sphere(point(".floatval($lng).",".floatval($lat)."), point(CAST(Longitude AS DECIMAL(18,14)), CAST(Latitude AS DECIMAL(18,14))), $metri)";

  mysqli_set_charset($com->getDb(), 'utf8');
  $result = mysqli_query($com->getDb(), $sql);
  return $result;
}
返回值放在生成json的函数中:

 public function GetListaDoveSostare($resultDoveSostare, $lat, $lng)
    {
      $dbOperationsObject = new DBOperations();
      $doveSostare= array();

        while ($row = mysqli_fetch_array($resultDoveSostare)) {

          $dove_sostare = array(
            "CompanyObjectId" => $row['CompanyObjectId'],
            "CompanyName" => $row['CompanyName'],
            "CityName" => $row['CityName'],
            "Latitude" => $row['Latitude'],
            "Longitude" => $row['Longitude'],
            "CampingLocationType" => ($row['CampingLocationType'] == "Camperplace") ? "Area Sosta" : "Campeggio",
            "PhotoUrl" => $row['PhotoUrl'],
            "MetriDaPosizioneCorrente" =>  $row['Metri']//$metri

          );

          $json= json_encode($dove_sostare);
          $dove_sostare = json_decode($json);
          array_push($doveSostare, $dove_sostare);
      }




      return $doveSostare;

    } 
非常感谢您的帮助

克里斯蒂安查看您的第一个查询,您没有正确通过半径:

SELECT CompanyObjectId, CompanyName, CityName, Latitude, Longitude,
       CampingLocationType, PhotoUrl
FROM tbl_cc
WHERE st_distance_sphere(POINT(13.5145461,43.564368), POINT(Longitude, Latitude)) <= 300
您提到的错误是“如果半径参数存在但不是正的话”。
请参阅进一步参考

您使用的是哪种数据库管理系统?哦,天哪,我忘了数据库管理系统。更新的问题请!好的,半径是300?以米为单位,被视为ehm,我在安科纳,但不工作,它必须通过坐标显示最近的城市…“不工作”没有任何意义。什么不起作用?你有什么错误?你的桌子上有离你提供的坐标300米的地方吗?对不起,我的回答很简短…不,我没有负300米。。。。如果我在安科纳(意大利)300米,没有显示整个300米的任何地方,但显示了德国的地方……那么您的查询应该如何返回任何东西?
 public function GetListaDoveSostare($resultDoveSostare, $lat, $lng)
    {
      $dbOperationsObject = new DBOperations();
      $doveSostare= array();

        while ($row = mysqli_fetch_array($resultDoveSostare)) {

          $dove_sostare = array(
            "CompanyObjectId" => $row['CompanyObjectId'],
            "CompanyName" => $row['CompanyName'],
            "CityName" => $row['CityName'],
            "Latitude" => $row['Latitude'],
            "Longitude" => $row['Longitude'],
            "CampingLocationType" => ($row['CampingLocationType'] == "Camperplace") ? "Area Sosta" : "Campeggio",
            "PhotoUrl" => $row['PhotoUrl'],
            "MetriDaPosizioneCorrente" =>  $row['Metri']//$metri

          );

          $json= json_encode($dove_sostare);
          $dove_sostare = json_decode($json);
          array_push($doveSostare, $dove_sostare);
      }




      return $doveSostare;

    } 
SELECT CompanyObjectId, CompanyName, CityName, Latitude, Longitude,
       CampingLocationType, PhotoUrl
FROM tbl_cc
WHERE st_distance_sphere(POINT(13.5145461,43.564368), POINT(Longitude, Latitude)) <= 300
SELECT CompanyObjectId, CompanyName, CityName, Latitude, Longitude,
       CampingLocationType, PhotoUrl
FROM tbl_cc
WHERE st_distance_sphere(POINT(13.5145461,43.564368), POINT(Longitude, Latitude), 300)