使用'<<<< '带有AND的符号在sql查询中

时间:2018-05-23 06:21:59

标签: php sql oracle

我尝试使用<时遇到问题带有AND条件的符号在sql查询中。

   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();
?>

由于此部分&lt;我收到以下错误AND 在线 WHERE(纬度 - 0.009&lt; AND纬度+ 0.00&gt;)

ORA-00936: missing expression
00936. 00000 -  "missing expression"

我认为在使用&lt;时使用了一些不正确的语法与AND 在线 WHERE(纬度 - 0.009&lt; AND纬度+ 0.00&gt;)

这里需要做些什么修正?

1 个答案:

答案 0 :(得分:3)

想一想!错误消息不言自明。

你试图将减法结果与之比较。要更正此问题,您必须将其更改为:

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

有关详细信息,请参阅:ORA-00936 missing expression

<强> [编辑]

关于问题的变化......

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

  

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

谢谢,@ skybunk!