语法错误sql并在数组中保存值

时间:2015-06-14 15:55:07

标签: php mysql arrays pdo

我尝试使用pdo创建查询。我希望只有行保存在数组$ result中,其值介于$lo$loo或/和$la以及$laa之间。对于这个棘手的问题,我很抱歉。

错误讯息:

  

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与MySQL服务器版本对应的手册,以便在'< = 0或纬度> = 0和< = 0)ORDER BY date'第1行附近使用正确的语法

    $range = 'range';
  $_COOKIE["$range"];

$longitude = 'longitude';
$_COOKIE["$longitude"];
$latitude = 'latitude';
$_COOKIE["$latitude"];


$onemile = 0,005581257;
$le = $range * $onemile; 
$lo = $longitude + $le;
$loo = $longitude - $le;
$la = $latitude + $le;
$laa = $latitude - $le;


$hostname='localhost';
        $user='root';
        $password='';



                try {
                        $dbh = new PDO("mysql:host=$hostname;dbname=log",$user,$password);

                        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
                         $sql = "SELECT id, autorid, date, longitude, latitude, title, text FROM post WHERE  (longitude >= $loo and <= $lo or latitude >= $laa and <= $la) ORDER BY date";
  if ($res = $dbh->query($sql)) {

     $result = $res->fetchAll();
     print_r($result);
   }


                }
                catch(PDOException $e)
                {
                        echo $e->getMessage();
                }

3 个答案:

答案 0 :(得分:3)

你不能像那样进行比较。每个where语句必须包含您正在进行比较的标识符。

您还需要使用括号来强制执行运算符优先级(这将是您的下一个错误)。

SELECT id, autorid, date, longitude, latitude, title, text 
FROM post 
WHERE  (
    longitude >= $loo and longitude <= $lo
) 
OR (
    latitude >= $laa and latitude <= $la
) 
ORDER BY date

答案 1 :(得分:1)

您的语法必须如下:

WHERE (longitude between $loo and $lo or latitude between $laa and $la)

答案 2 :(得分:1)

您的WHERE条件缺少某些值:

longitude >= $loo and <= $lo or latitude >= $laa and <= $la

这些是您正在使用的实际情况:

longitude >= $loo
<= $lo
latitude >= $laa
<= $la

注意其中两个实际上并没有比较任何东西。也许你是这个意思:

longitude >= $loo and longitude <= $lo or latitude >= $laa and latitude <= $la

您可能还想嵌套一些括号以使条件更明确:

(longitude >= $loo and longitude <= $lo) or (latitude >= $laa and latitude <= $la)