在WHERE子句中使用if条件时出现MySQL语法错误

时间:2015-08-06 13:01:47

标签: php mysql pdo mysql-error-1064

当我在Mysql查询的if子句中使用WHERE条件时,我收到语法错误。例如,如果我只使用WHERE 1这样的条件放入sector = 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的正确语法   限制0,30和#39;在第43行'在   E:\ xampp \ htdocs \ dolche \ admin \ class \ pagination.php:451堆栈跟踪:#0   E:\ XAMPP \ htdocs中\ dolche \ ADMIN \类\ pagination.php(451):   PDOStatement-> execute()#1   E:\ xampp \ htdocs \ dolche \ admin \ search.php(190):pagination-> execute()#2   {main}抛出E:\ xampp \ htdocs \ dolche \ admin \ class \ pagination.php on   第451行

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

4 个答案:

答案 0 :(得分:5)

您错过了1AND之间的空格:

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

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

答案 1 :(得分:1)

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

尝试:

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

而不是

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

答案 2 :(得分:0)

AND P.sector = '$sector'

之前添加空格

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

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

答案 3 :(得分:0)

请给出空格:

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

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