【问题标题】:MySQL syntax error on using if condition in WHERE clause在 WHERE 子句中使用 if 条件时的 MySQL 语法错误
【发布时间】:2015-08-06 13:01:47
【问题描述】:

当我在 Mysql 查询的 WHERE 子句中使用 if 条件时出现语法错误。例如,如果我只输入WHERE 1sector = 2 这样的条件,它就可以工作。但是当我设置if 条件时,它不再起作用了。

$query= "SELECT 
   P.id
  ,P.price
  ,P.contract
  ,P.property_type
  ,P.sector
  ,P.title
  ,P.address
  ,P.bedrooms
  ,P.bathrooms
  ,P.price
  ,P.m2
  ,P.text_english
  ,P.photo_01
  ,P.utilities
  ,P.google_maps
  ,P.date


  ,CT.id
  ,CT.english_text
  ,PT.id
  ,PT.english
  ,C.cityname
  ,S.sectorname
  ,S.id
  ,O.ownername
  ,O.phone_one
  ,O.phone_two
  ,O.email
  ,O.notes

FROM properties P
JOIN contract CT
  ON CT.id = P.contract
JOIN property_type PT
  ON PT.id = P.property_type
JOIN city C
  ON C.id = P.city
JOIN sector S
  ON S.id = P.sector
JOIN owner O
  ON O.id = P.owner WHERE 1";           
            if (!empty($sector)) { $query .= "AND P.sector = '$sector'"; }
            if (!empty($property_type))  { $query .= " AND P.property_type = '$property_type'"; }
            if (!empty($contract))  { $query .= " AND P.contract = '$contract'"; }
            if (!empty($minimum_price))  { $query .= " AND P.price BETWEEN '$minimum_price' AND '$maximum_price'"; }
            if (!empty($m2_from))  { $query .= " AND P.m2 BETWEEN '$m2_from' AND '$m2_until'"; }
            if (!empty($bedrooms))  { $query .= " AND P.bedrooms = '$bedrooms'"; }

这是错误:

致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE[42000]: 语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在 'P.sector = 2 附近使用正确的语法 LIMIT 0, 30' at line 43' in E:\xampp\htdocs\dolche\admin\class\pagination.php:451 堆栈跟踪:#0 E:\xampp\htdocs\dolche\admin\class\pagination.php(451): PDOStatement->execute() #1 E:\xampp\htdocs\dolche\admin\search.php(190): 分页->执行() #2 {main} 在 E:\xampp\htdocs\dolche\admin\class\pagination.php 中抛出 第 451 行

非常欢迎任何解决此问题的帮助。谢谢!

【问题讨论】:

    标签: php mysql pdo mysql-error-1064


    【解决方案1】:

    1AND 之间缺少一个空格:

    if (!empty($sector)) { $query .= "AND P.sector = '$sector'"; }
                                    ^^^^
                                    HERE
    

    有趣的是,你在其他任何地方都做对了。

    【讨论】:

      【解决方案2】:

      您必须在 AND 之前添加一个空格。

      试试:

      if (!empty($sector)) { $query .= " AND P.sector = '$sector'"; }
      

      而不是

      if (!empty($sector)) { $query .= "AND P.sector = '$sector'"; }
      

      【讨论】:

        【解决方案3】:

        AND P.sector = '$sector'前加空格

        改变

        if (!empty($sector)) { $query .= "AND P.sector = '$sector'"; }
        

        if (!empty($sector)) { $query .= " AND P.sector = '$sector'"; }
        

        【讨论】:

          【解决方案4】:

          请给空间:

          ON O.id = P.owner WHERE 1 ";
          

          if (!empty($sector)) { $query .= " AND P.sector = '$sector'"; }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-07-17
            • 2021-10-07
            • 1970-01-01
            • 1970-01-01
            • 2022-11-10
            • 1970-01-01
            • 1970-01-01
            • 2013-03-02
            相关资源
            最近更新 更多