PDO - 动态查询构建| SQLSTATE [HY093]:参数号无效

时间:2015-07-13 18:51:47

标签: php pdo

我试图建立一个动态查询,但是我遇到一个错误,告诉我参数计数不合适,一切似乎对我来说还有4个参数。

我的尝试

$activeFilters 
array(1) {
      ["zlec_addres"]=>
      string(2) "Sz"
      ["zlec_nr"]=>
      string(3) "OPC"
}
function cond_gen(array $activeFilters)
{
    $query_var = [];        
    $i=0;
    foreach ($activeFilters as $key => $value) {
        $query_var[] = '`'.array_keys($activeFilters)[$i].'` LIKE concat("%",:condition'.$i.',"%")';
        $i++;
    }

    return 'WHERE ' . implode('AND', $query_var);
}

$conditions = cond_gen($activeFilters);

//eqb
$db->bindMore($activeFilters);
$db->bind("start",$start);
$db->bind("pagesize",$pagesize);
$dynQuery = $db->query("SELECT zlec_status.nazwa                       AS Status, 
       piorytet.nazwa                          AS Priorytet, 
       Concat(koord.imie, ' ', koord.nazwisko) AS `Koordynator`, 
       Concat(zlec_adresy.miasto, ' - ', zlec_adresy.ulica, ' ', 
       zlec_adresy.oddzial) 
                                               AS `adres`, 
       zlec_z_dnia,zlec_id,
       zlec_nr, 
       zlec_do, 
       zlec_ogran, 
       awizacje, 
       awizacja_na_dzien, 
       termin_zamkniecia, 
       tresc, 
       uwagi 
FROM   zlec 
       INNER JOIN koord 
               ON zlec.koord = koord.id 
       INNER JOIN zlec_adresy 
               ON zlec.zlec_addres = zlec_adresy.id 
       INNER JOIN piorytet 
               ON zlec.priorytet = piorytet.id 
       INNER JOIN zlec_status 
               ON zlec.status_zlecenia = zlec_status.id 
$conditions 
LIMIT :start, :pagesize");

SQL错误未处理的异常。
SQLSTATE [HY093]:参数号无效

WHERE `zlec_addres` LIKE concat("%",:condition0,"%")AND`zlec_nr` LIKE concat("%",:condition1,"%") 
LIMIT :start, :pagesize

1 个答案:

答案 0 :(得分:0)

为我工作的代码

  function cond_gen(array $activeFilters)
    {
        $query_var = [];        
        $i=0;
        foreach ($activeFilters as $key => $value) {
            $query_var[] = '`'.array_keys($activeFilters)[$i].'` LIKE concat(\'%\',:'.array_keys($activeFilters)[$i].',\'%\')';
            $i++;
        }

        return 'WHERE ' . implode(' AND ', $query_var);
    }



    $conditions = cond_gen($activeFilters);
    echo cond_gen($activeFilters);

    //eqb
    var_dump($activeFilters);
    $db->bindMore($activeFilters);
    $db->bind("start",$start);
    $db->bind("pagesize",$pagesize);
    $dynQuery = $db->query("SELECT zlec_status.nazwa                       AS Status, 
           piorytet.nazwa                          AS Priorytet, 
           Concat(koord.imie, ' ', koord.nazwisko) AS `Koordynator`, 
           Concat(zlec_adresy.miasto, ' - ', zlec_adresy.ulica, ' ', 
           zlec_adresy.oddzial) 
                                                   AS `adres`, 
           zlec_z_dnia,zlec_id,
           zlec_nr, 
           zlec_do, 
           zlec_ogran, 
           awizacje, 
           awizacja_na_dzien, 
           termin_zamkniecia, 
           tresc, 
           uwagi 
    FROM   zlec 
           INNER JOIN koord 
                   ON zlec.koord = koord.id 
           INNER JOIN zlec_adresy 
                   ON zlec.zlec_addres = zlec_adresy.id 
           INNER JOIN piorytet 
                   ON zlec.priorytet = piorytet.id 
           INNER JOIN zlec_status 
                   ON zlec.status_zlecenia = zlec_status.id 
    $conditions 
    LIMIT :start, :pagesize");