2015-02-03 4 views
0

PHP를 통해 결과를 검색하지 않지만 phpMyAdmin에서 작동하는 PDO로 쿼리를 실행 중입니다. 스크립트의 첫 번째 쿼리가 아니기 때문에 연결 설정에 대해 확신합니다. 다른 스크립트는 제대로 작동합니다. 다음은 PHP 코드 : PDO 더블 라이트 (Params 포함)

 $retour = array(); 
     $filters = array(); 
     $filters['media_type'] = 'mytype'; 
     $filters['libelle'] = 'sometext'; 
     $start = 0; 
     $count = 9; 

     $sql = "SELECT * FROM ".DB_PROD_PREFIX.$this->table." t "; 
     $sql .= " LEFT JOIN ".DB_PROD_PREFIX.$this->table."_lang l ON t.id = l.id AND l.langue = :langue"; 
     $sql .= " WHERE 1"; 
     if (count($filter)>0){ 
      foreach($filter as $field => $value){ 
       $sql .= " AND ".$field." LIKE :".$field; 
      } 
     } 
     $sql .= ($order!='' ? " ORDER BY ".$order : ''); 
     $sql .= ($count != '' ? " LIMIT ".($start != ''?':start':'0').", :count" : ''); 

     $stmt = $db->prepare($sql); 
     if($start != '') $stmt->bindParam('start', $start, PDO::PARAM_INT); 
     if($count != '') $stmt->bindParam('count', $count, PDO::PARAM_INT); 
     if ($langue != '') $stmt->bindParam('langue', $langue); 

     if (count($filter)>0){ 
      foreach($filter as $field => $value) { 
       $f = '%'.$value.'%'; 
       $stmt->bindParam($field, $f, PDO::PARAM_STR); 
      } 
     } 

     echo $stmt->queryString.print_r($filter, true); 

     if (!$stmt->execute()) echo $stmt->errorInfo(); 
     $res = $stmt->fetchAll(); 
     foreach($res as $id => $row){ 
      $retour[]=$row; 
     } 
     return $retour; 

나는 $ 필터 어레이, 쿼리 잘 작동의 두 키 중 하나를 설정 해제하면

. 생성 된 SQL은 다음과 같습니다.

SELECT * FROM table1 t 
LEFT JOIN table1_lang l ON t.id = l.id AND l.langue = :langue 

WHERE 1 
AND media_type LIKE :media_type 
AND libelle LIKE :libelle 

ORDER BY position LIMIT :start, :count 

감사합니다.

피에르 M.

+1

런타임에 이러한 매개 변수의 값은 무엇입니까? phpMyAdmin에서 정확한 * 값으로 테스트 해 보셨습니까? –

+0

안녕하세요, 귀하의 답변에 감사드립니다. 매개 변수는 다음과 같습니다. Array ([media_type] => '% image %'[libelle] => '% funn %') langue : fr start : 0 count : 9. 그걸로 phpMyadmin에서 실행할 때 작동합니다. :/ –

답변

0

팁은 좋지만 효과가 없습니다!

$media_type = '%'.$filter['media_type'].'%'; 
$stmt->bindParam('media_type', $media_type, PDO::PARAM_STR); 
$libelle = '%'.$filter['libelle'].'%'; 
$stmt->bindParam('libelle', $libelle, PDO::PARAM_STR); 

왜 배열에 foreach 문으로 같은 일을하는 것은 작동하지 않습니다 여기에 작동 LIKE 매개 변수를 관리하는 코드 조각은?

if (count($filter)>0){ 
    foreach($filter as $field => $value) { 
     $value = "%$value%"; 
     $stmt->bindParam($field, $value, PDO::PARAM_STR); 
    } 
} 
+0

그리고 내가 말했듯이, $ filter가 오직 하나의 키/값을 가질 때, 쿼리는 작동합니다! : / –