2015-08-06 10 views
1

Я получаю синтаксическую ошибку, когда я использую if условия в предложении WHERE моего запроса Mysql. Например, если я положил WHERE 1 только с условием sector = 2, он работает. Но когда я ставлю условия if, он больше не работает.Ошибка синтаксиса MySQL при использовании условия if в выражении WHERE

$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'"; } 

Это ошибка:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'P.sector = 2 LIMIT 0, 30' at line 43' in E:\xampp\htdocs\dolche\admin\class\pagination.php:451 Stack trace: #0 E:\xampp\htdocs\dolche\admin\class\pagination.php(451): PDOStatement->execute() #1 E:\xampp\htdocs\dolche\admin\search.php(190): pagination->execute() #2 {main} thrown in E:\xampp\htdocs\dolche\admin\class\pagination.php on line 451

Любая помощь в решении этого вопроса будет очень приветствуется. Благодаря!

ответ

5

У вас не хватает места между 1 и AND:

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

Интересно, что вы получили это право везде.

+0

спасибо! теперь он отлично работает. –

1

Вы должны добавить пробел перед AND.

Try:

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

вместо

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

Добавить Отступ перед AND P.sector = '$sector'

Изменение от

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

Для

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

Пожалуйста, дайте место либо:

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

или

if (!empty($sector)) { $query .= " AND P.sector = '$sector'"; } 
Смежные вопросы