【问题标题】:Issue faced while using the '< ' symbol with AND in sql query在 sql 查询中使用带有 AND 的“<”符号时遇到的问题
【发布时间】:2018-05-23 06:21:58
【问题描述】:

当我尝试在 sql 查询中使用带有 AND 条件的

   WHERE (latitude - 0.009 < AND latitude + 0.00 >)
           AND (longitude - 0.009 < 
                AND longitude + 0.009 > )

这是我在 CorePHP 中的代码:

<?php
ini_set("display_errors", 0);

$lat = $_REQUEST['latit'];
$long = $_REQUEST['longit'];

include ("commanvar.php");
include ("class.db.php");

$coordinates_ = '';

// function to calculate distance between two latitudes and longitudes
function distance($lat1, $lng1, $lat2, $lng2, $miles = true)
{
    $pi80 = M_PI / 180;
    $lat1 *= $pi80;
    $lng1 *= $pi80;
    $lat2 *= $pi80;
    $lng2 *= $pi80;

    $r = 6372.797; // mean radius of Earth in km
    $dlat = $lat2 - $lat1;
    $dlng = $lng2 - $lng1;
    $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    $km = $r * $c;

    return ($miles ? $km * 0.621371192 : $km);
}

$obj = new db_connect();

// added by pramod

$sql = "SELECT name,
       latitude,
       longitude,
       TYPE
  FROM (SELECT name,
                TO_BINARY_FLOAT(latitude) latitude,
                TO_BINARY_FLOAT(longitude) longitude,
               TYPE
          FROM (SELECT name,
                       latitude,
                       longitude,
                       TYPE,
                       is_number (latitude) latisnum,
                       is_number (longitude) longisnum
                  FROM (SELECT name,
                               REGEXP_SUBSTR (latlon,
                                              '[^,]+',
                                              1,
                                              1)
                                  latitude,
                               REGEXP_SUBSTR (latlon,
                                              '[^,]+',
                                              1,
                                              2)
                                  longitude,
                               TYPE
                          FROM (SELECT olt.name,
                                       olt_details.latlon,
                                       'olt' AS TYPE
                                  FROM ftth.olt, ftth.olt_details
                                 WHERE olt_id = id
                                UNION
                                SELECT name, latlon, TYPE FROM ftth.splitters
                                ))
                 WHERE latitude IS NOT NULL AND longitude IS NOT NULL)
         WHERE latisnum = 1 AND longisnum = 1)
 WHERE (latitude - 0.009 < $lat
        AND latitude + 0.00 > $lat)
       AND (longitude - 0.009 < $long
            AND longitude + 0.009 > $long)";
//die();

$obj->db_query($sql);

// echo $sql;

// echo $lat . ',' . $long;
// define json array coordinates and prepare it's elements for returning via AJAX

$coordinates = '{
"coordinates": [';

while ($result = $obj->db_fetch_array(1)) {

    $latitude = $result['LATITUDE'];
    $longitude = $result['LONGITUDE'];
    $name = $result['NAME'];
    $type = $result['TYPE'];

    $latlon_fiber = $result['LATITUDE'] . ", " . $result['LONGITUDE'];

    $distance_fromswitch = distance($lat, $long, $latitude, $longitude, FALSE);
    $distance_fromswitch = floor($distance_fromswitch * 1000);

    $coordinates_ .= '{ "distance":"' . $distance_fromswitch . '" ,"site_name":"' . $name . '" , "latitude":"' . $latitude . '" , "longitude":"' . $longitude . '" , "device_type":"' . $type . '" },';
}

$coordinates .= rtrim($coordinates_, ',');

$coordinates .= "]}";

echo $coordinates;
$obj->free();
?>

由于这部​​分 WHERE (latitude - 0.009 )

行上,我收到以下错误
ORA-00936: missing expression
00936. 00000 -  "missing expression"

我认为我在 WHERE (latitude - 0.009 ) 上使用 时使用了一些不正确的语法

此处需要进行哪些更正?

【问题讨论】:

  • 再次阅读您自己的代码。纬度是多少 - 小于 0.009?更改为例如 latitude - 0.009
  • 您能告诉我们您要检查的纬度/经度范围吗?您的语法已关闭。
  • 您正试图将减法的结果与空值进行比较。要更正此问题,您必须将其更改为:(latitude - 0.009 &lt; SomeValueHere AND latitude + 0.00 &gt; SomeValueHere)
  • 调试时,最糟糕的事情就是禁用所有错误报告。将您的第一行更改为ini_set('display_errors', 'On'); error_reporting(E_ALL);

标签: php sql oracle


【解决方案1】:

想想吧!错误消息一目了然。

您正在尝试将减法的结果与空值进行比较。要更正此问题,您必须将其更改为:

WHERE (latitude - 0.009 < SomeValueHere AND latitude + 0.00 > SomeValueHere)

更多详情请见:ORA-00936 missing expression

[编辑]

关于问题中所做的更改...

您在调试(检查)代码时寻求帮助。让我引用您的评论的评论:

可能变量没有任何值并且传递为空 字符串到您的查询中.. – skybunk

谢谢你,@skybunk!

【讨论】:

  • 这是我在 PHP 中的代码部分: WHERE (latitude - 0.009 $lat) AND (longitude - 0.009 $long)";
  • 我正在查看问题中的代码。我没有找到$lat$long 变量。您必须再次检查您的代码。
  • 可能变量没有任何值并将空字符串传递给您的查询..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多