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.
런타임에 이러한 매개 변수의 값은 무엇입니까? phpMyAdmin에서 정확한 * 값으로 테스트 해 보셨습니까? –
안녕하세요, 귀하의 답변에 감사드립니다. 매개 변수는 다음과 같습니다. Array ([media_type] => '% image %'[libelle] => '% funn %') langue : fr start : 0 count : 9. 그걸로 phpMyadmin에서 실행할 때 작동합니다. :/ –