簡體   English   中英

PDO MySQL准備的語句,帶有可選的where語句

[英]PDO MySQL prepared statement with optional where statements

我正在處理從具有各種搜索選項的表單提交的查詢,該搜索選項可能包含在我的查詢中,也可能不包含在其中。 有沒有更好的方法可以動態地執行此操作,因為這似乎不起作用?

我不斷收到錯誤Fatal error: Call to a member function fetchAll() on boolean 我知道這里發生了很多事情,我不想放很多代碼來通讀。 簡而言之,當我回顯$ sql時,我的select語句看起來不錯,但是無論我做什么,我都會得到相同的錯誤,這告訴我該語句有問題。 這種方法是否可行,還是我需要使用另一種方法? 如果是這樣,有什么更好的方法?

 $sql = "SELECT DISTINCT mt.id, mt.name, mt.phone 
       FROM main_table mt
       LEFT JOIN jnct_tbl_srvstate st ON mt.id = st.mt_id
       LEFT JOIN jnct_tbl_equip eq on mt.id = eq.mt_id
       LEFT JOIN jnct_tbl_accessory ac ON mt.id = ac.mt_id
       LEFT JOIN tbl_car c ON mt.id = c.mt_id
       WHERE mt.id = c.id";

      if($state_array_count != 0){
         $sql.= " AND srvstate_id IN ($st_holders)";
      }    
      if($equip_array_count != 0){
         $sql.= " AND equip_id IN ($eq_holders)";  
      }
      if($accessory_array_count != 0){
         $sql.= " AND accessory_id IN ($ac_holders)";


      $sql.= " ORDER BY mt.id";

      $query = $db->prepare($sql);

我真正需要幫助的是結合上面的if語句。

 if($state_array_count != 0){     
     foreach($state_array as $st_placeholder => $st_value) {
        if($st_value != '') {
            $st_placeholder = ":$st_placeholder";
            $query->bindValue($st_placeholder, $st_value);
        }
     }
 }

 if($equip_array_count != 0){
      if($eq_value != '') {
          foreach($equip_array as $eq_placeholder => $eq_value) {
            $eq_placeholder = ":$eq_placeholder";
            $query->bindValue($eq_placeholder, $eq_value);
       }
    }
 }

 if($accessory_array_count != 0){
    foreach($accessory_array as $ac_placeholder => $ac_value) {
        if($ac_value != '') {
            $ac_placeholder = ":$ac_placeholder";
            $query->bindValue($ac_placeholder, $ac_value);
        }
    }
 }



 $results = $query->execute(); 

 $rs = $results->fetchAll(PDO::FETCH_ASSOC);

execute()方法不返回結果對象。 它返回布爾值,true或false。

fetchAll()是PDOStatement對象的方法。 這是一個例子:

$sth = $dbh->prepare($sql);
$sth->execute();    
$result = $sth->fetchAll();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM