2012-05-16 2 views
5

LIMIT SQL 쿼리의 일부분을 바인딩하는 데 문제가 있습니다. 이는 쿼리가 문자열로 전달되기 때문입니다. 바인딩 매개 변수를 다루는 여기서 another Q을 보았습니다. 배열에서 명명 된 자리 표시자를 다루는 것이 없습니다.명명 된 자리 표시 자로 PDO/MySQL LIMIT 설정

public function getLatestWork($numberOfSlides, $type = 0) { 

$params = array(); 
$params["numberOfSlides"] = (int) trim($numberOfSlides); 
$params["type"] = $type; 

$STH = $this->_db->prepare("SELECT slideID 
    FROM slides 
    WHERE visible = 'true' 
     AND type = :type 
    ORDER BY order 
    LIMIT :numberOfSlides;"); 

$STH->execute($params); 

$result = $STH->fetchAll(PDO::FETCH_COLUMN); 

return $result;   
} 

내가지고있어 오류는 다음과 같습니다 : Syntax error or access violation near ''20'' (20 $numberOfSlides의 값)

여기 내 코드입니다.

어떻게 해결할 수 있습니까?

+0

하는 $의 PARAMS [ "numberOfSlides"] = (INTVAL를 사용해보십시오 (($ numberOfSlides를)) 트림, –

+1

정확한 DUP http://stackoverflow.com/questions/10437423/how-can-i-pass-an -array-의-PDO 파라미터 아직 여전히-지정-자신의-유형/10438026 # 자세한 설명은 10,438,026 – goat

답변

9

문제는 문자열로 execute() quotes the numbers 및 취급이 : 수동에서

- 많은 요소 값의 배열 실행중인 SQL 문에 바운드 매개 변수가 있습니다. 모든 값은 PDO :: PARAM_STR로 처리됩니다.

<?php 
public function getLatestWork($numberOfSlides=10, $type=0) { 

    $numberOfSlides = intval(trim($numberOfSlides)); 

    $STH = $this->_db->prepare("SELECT slideID 
           FROM slides 
           WHERE visible = 'true' 
           AND type = :type 
           ORDER BY order 
           LIMIT :numberOfSlides;"); 

    $STH->bindParam(':numberOfSlides', $numberOfSlides, PDO::PARAM_INT); 
    $STH->bindParam(':type', $type, PDO::PARAM_INT); 

    $STH->execute(); 
    $result = $STH->fetchAll(PDO::FETCH_COLUMN); 

    return $result; 
} 
?> 
+0

http://www.php.net/manual/en/pdostatement.execute.php#76966 –

+0

감사합니다 하지만 이제는 또 다른 문제가 있습니다 : '엄격한 표준 : 변수 만 참조로 전달해야합니다.' –

+0

bindParam에서'intval (trim ($ numberOfSlides))'를 가져와야 만했습니다. :) –

3
나는 PARAMS 바인딩과 유형을 강제 좋을 것

:

$STH->bindParam(':numberOfSlides', $numberOfSlides, PDO::PARAM_INT); 
$STH->execute(); 
관련 문제