Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO MySQL准备语句,带有可选的where语句_Php_Mysql_Pdo_Prepared Statement - Fatal编程技术网

Php PDO MySQL准备语句,带有可选的where语句

Php PDO MySQL准备语句,带有可选的where语句,php,mysql,pdo,prepared-statement,Php,Mysql,Pdo,Prepared Statement,我正在处理一个从表单提交的查询,该表单包含各种搜索选项,这些选项可以包含在我的查询中,也可以不包含在我的查询中。有没有更好的方法动态执行此操作,因为这似乎不起作用 我不断收到错误致命错误:调用布尔值上的成员函数fetchAll()。我知道这里发生了很多事情,我不想把大量的代码通读一遍。因此,长话短说,当我回显$sql时,我的select语句看起来不错,但无论我做什么,我都会得到相同的错误,这表明该语句有问题。这种方法可行吗?或者我需要使用另一种方法吗?如果是这样,什么是更好的方法 $sql =

我正在处理一个从表单提交的查询,该表单包含各种搜索选项,这些选项可以包含在我的查询中,也可以不包含在我的查询中。有没有更好的方法动态执行此操作,因为这似乎不起作用

我不断收到错误
致命错误:调用布尔值上的成员函数fetchAll()。我知道这里发生了很多事情,我不想把大量的代码通读一遍。因此,长话短说,当我回显$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();
execute()
方法不返回结果对象。它返回布尔值,true或false

fetchAll()
是PDOStatement对象的方法。下面是一个例子:

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

谢谢你,比尔!大约30秒就修好了。我把所有复杂的东西都搞定了,但我还是设法把PDO搞错了。哈哈。谢谢比尔!大约30秒就修好了。我把所有复杂的东西都搞定了,但我还是设法把PDO搞错了,哈哈。