【问题标题】:Syntax error sql and save values in array语法错误 sql 并将值保存在数组中
【发布时间】:2015-06-14 15:55:06
【问题描述】:

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

错误信息:

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“= 0 和

    $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();
                }

【问题讨论】:

    标签: php mysql arrays pdo


    【解决方案1】:

    你不能像这样链接比较。每个 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
    

    【讨论】:

      【解决方案2】:

      你的语法必须是这样的:

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

      【讨论】:

        【解决方案3】:

        您的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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-03
          • 1970-01-01
          • 1970-01-01
          • 2011-05-28
          • 2018-08-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多