2012-06-02 7 views
2
<?php 
    $current = 0; 
    $results = 5; 
    $statement = $db->prepare("SELECT title, id FROM mytable LIMIT ?, ?"); 
    $statement->execute(array($current, $results)); 
?> 

var_dump($statement); 
=> public 'queryString' => string 'SELECT title, id FROM mytable LIMIT ?, ?' (length=39) 

왜 이것이 작동하지 않는지 알 수있는 사람이 있습니까?PHP 준비된 문이 작동하지 않음

+5

"작동하지 않음"을 정의하십시오. –

+0

questionmarks는 $ current 및 $ results로 대체되지 않으므로 false를 반환합니다. –

+0

@RepWhoringPeeHaa - 감사합니다. 태그를 완전히 놓쳤습니다. 그리고 언제나처럼, 뭔가 배웠습니다. 감사! –

답변

2

문자열이 아닌 정수로 매개 변수를 바인딩해야합니다 (기본값). 문자열로 묶는 매개 변수는 자동으로 주위에 따옴표를 추가합니다.

$statement->bindParam(":current", $current, PDO::PARAM_INT) 

이 예제에서는 명명 된 자리 표시자를 사용합니다. 나는 당신이 그것을 사용하는 것이 좋습니다.

+0

태그를 읽으십시오. @cale –

1

제공된 값으로 자리 표시자를 대체 한 문자열을 볼 수있는 기능은 pdo가 제공하는 기능이 아닙니다. 그러나 그것은 준비된 진술을 당신의 값으로 적절하게 실행할 것입니다.

의 경우 pdos mysql 드라이버의 경우 값 배열에서 execute()를 사용하면 limit 절의 일부에 값을 바인딩 할 때 특이한 점이 있습니다. How can I pass an array of PDO parameters yet still specify their types?

관련 문제