2014-01-22 3 views
0

:catch되지 않은 예외 'PDOException'[42000] : 구문 오류 또는 액세스 위반 : 1064 [해결] 내 쿼리입니다

public function getAllServices($start, $limit) 
{ 
    $services = array(); 

    $q = $this->init()->prepare('SELECT id, service_title, time_add FROM services ORDER BY id DESC LIMIT :start, :limit'); 
    $q->execute(array(":start" => $start, ":limit" => $limit)); 

    while ($values = $q->fetchAll(PDO::FETCH_ASSOC)) 
     $services[] = $values; 

    return $services; 
} 

오류 메시지 :

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0', '10''

편집 : 그게 내 문제를 해결했습니다 :

$q = $this->init()->prepare("SELECT id, service_title, time_add FROM services ORDER BY id DESC LIMIT :start, :limit"); 
    $q->bindParam(':start', $start, PDO::PARAM_INT); 
    $q->bindParam(':limit', $limit, PDO::PARAM_INT); 
    $q->execute(); 
+0

연결 변수가 전역 변수가 아닙니다. – Enijar

+0

나는 변화를 시도한다 : 시작과 : 다른 이름으로 제한하지만 결과가 없다. –

+2

글쎄, 나는 오늘 무언가를 배웠다 @ ВълкоКалъчев --- 그것이 해결되었다는 것을 알기에 다행이다. 당신은 자신의 대답을 게시 할 수 있다는 것을 알고 있습니다. –

답변

0

구문 오류 메시지를 기반으로, LIMIT에 전달 된 정수를 인용하고 있다고 말하면 허용되지 않습니다.

+0

그게 문제지만,이 솔루션이 도움이된다고 생각하지 않습니다. 기본 바인딩 유형은'PDO :: PARAM_STR' – Phil

+0

@Phil Cool입니다. 올바른 구문을 사용하여 답변을 제안하면 기꺼이 투표 해 드리겠습니다. :) – jeremycole

+0

OP가 이미 해결했습니다. – Phil

0

그냥 몇 가지 추가 정보를 추가하면됩니다. 비슷한 문제가있어 잠시 동안 Google에서 수정 프로그램을 검색했습니다.

$q = $this->init()->prepare(" 
    (SELECT * FROM my_table WHERE date > :date LIMIT :limit) 
    UNION 
    (SELECT * FROM their_table WHERE date > :date LIMIT :limit) 
"); 
$q->bindValue(':date', $somedate, PDO::PARAM_STR); 
$q->bindValue(':limit', $limit, PDO::PARAM_INT); 
$q->execute(); 

이 코드에서 결과 조회가 처음 탈출되지 않습니다 : 제한하지만 잘못 초 탈출 것 : 제한, 예를 내가 발견 한 것은 PDO의 파라미터 설정을 반복 매개 변수에 문제가 있다는 것입니다 :

(SELECT * FROM my_table WHERE date > '2014-04-14' LIMIT 20) 
UNION 
(SELECT * FROM their_table WHERE date > '2014-04-14' LIMIT '20') 

당신이 LIMIT이 유사한 문제를 많이 언급되는 것을 볼 이유가 필드 비교를 이스케이프 정수를 제공하는 MySQL의에서 다 치신하지 않을 것을, BU LIMIT에 대해서도 똑같은 일을한다.

이렇게 OP의 문제에 특별히 답하는 것은 아니지만 나 자신과 같은 많은 사람들이 내가 가지고있는 것과 동일한 문제로이 게시물에 올라갈 것이라고 생각합니다. 내가 할

현재이의 깔끔한 해결책이없는, 그래서 같은 고유 매개 변수를 사용하여 촬영했습니다 :limit1 : limit2. 아마도 누군가가 더 나은 해결책을 제시 할 수 있을까요?

관련 문제