php mysql动态选择用户输入的查询

时间:2013-10-21 22:15:53

标签: php mysql sql pdo

我有一个带有复选框,输入字段的表单。用户可以选择或输入某些内容,并且正在构建查询。现在,当用户只选择一个复选框时,查询工作正常,但是当选择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
  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在数据库中(如果我单独选择它们,它可以工作)。

由于

1 个答案:

答案 0 :(得分:3)

应该是OR而不是AND。 如果AND均为1 event_id,则AND只会返回一些内容。OR如果event_id为1或者event_id为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