2016-09-15 9 views
0

私のクエリに含まれる可能性のある、またはできなかったさまざまな検索オプションを含むフォームから送信されたクエリに取り組んでいます。これは動作しないようにこれを動的に行うより良い方法はありますか?PDOオプションのwhereステートメントを含むMySQLプリペイドド・ステートメント

エラーが発生しています。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); 

答えて

4

​​方法は、結果オブジェクトを返しません。これは真または偽のブール値を返します。

fetchAll()は、PDOStatementオブジェクトのメソッドです。ここに例があります:

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

ありがとうございます!それは約30秒で修正されました。私はすべての複雑なものを正確に持っていたが、どうにかしてPDOを何とかしてしまった。 – zcleft

関連する問題