2013-10-21 46 views
0

我有一個帶有複選框和輸入字段的表單。用戶可以選擇或輸入一些內容,並且正在構建查詢。現在,當用戶只選擇一個複選框時,查詢完美無缺,但是當選擇2個複選框時,我會得到一個零計數。 這就是查詢返回:php mysql從用戶輸入動態選擇查詢

SELECT nbs_contact_events.contact_id, nbs_contacts.nbs_contact_id, nbs_contacts.nbs_contact_sur 
FROM nbs_contacts 
LEFT JOIN nbs_contact_events ON nbs_contact_events.contact_id = nbs_contacts.nbs_contact_id 
WHERE nbs_contact_events.event_id = 1 
    AND nbs_contact_events.event_id = 21 

返回的計數:0

作爲遵循作出該選擇的PHP(PDO)代碼:

$this->pdo = $this->connectMySql(); 
     $query = "SELECT nbs_contact_events.contact_id, nbs_contacts.nbs_contact_id, nbs_contacts.nbs_contact_sur 
         FROM 
         nbs_contacts 
         LEFT JOIN 
         nbs_contact_events 
         ON 
         nbs_contact_events.contact_id = nbs_contacts.nbs_contact_id"; 
     if(isset($eventlist) || isset($nbslist) || isset($nbs_relativeto)){ 
      $query .= " WHERE "; 

      if(isset($eventlist)){     
       $source = array_filter($eventlist); 
       $conditions = array(); 
       foreach($source as $field => $value){ 

        $conditions[] = "nbs_contact_events.event_id = " . mysql_real_escape_string($value); 

        //$conditions[] = "event_id = :event_id"; 
       } 
       $where = implode(" AND ", $conditions); 
       $query .= $where; 
      } 
     } 
     $stmt = $this->pdo->prepare($query); 
     print_r($query); 
     if(!$stmt->execute($conditions)){ 
      return false; 
     } 

     $nart = $stmt->rowCount(); 
     echo "returned count: " . $nart; 
     if ($nart == 0) { 
      return false; 
     } 

有什麼不對查詢,它爲什麼不返回任何東西?我知道ID 1和21在數據庫中(如果我單獨選擇它們,它會起作用)。

感謝

+0

難道我的回答幫助你的問題嗎? –

+0

是的,但爲什麼是或者而不是?他們有什麼區別? – PDOProgrammer

+0

我編輯了一個小解釋我的答案。如果您覺得它有幫助,不要忘記將其標記爲已接受。 –

回答

3

應該OR而不是ANDAND只會返回東西,如果event_id既是1 AND 2. OR返回東西,如果event_id是1或事項標識爲2

select nbs_contact_events.contact_id, 
    nbs_contacts.nbs_contact_id, 
    nbs_contacts.nbs_contact_sur 
from nbs_contacts 
left join nbs_contact_events 
    on nbs_contact_events.contact_id = nbs_contacts.nbs_contact_id 
where nbs_contact_events.event_id = 1 
    or nbs_contact_events.event_id = 21