SQL LIMIT 절에서 바인드 변수를 올바르게 사용하세요
질문:
bindValue
을 사용하여 LIMIT 절의 skip
및 max
값을 설정하려고 하면 변수에 작은따옴표가 추가되므로 생성된 SQL 문이 유효하지 않습니다. 이 문제를 해결하는 방법?
정답:
이 문제를 해결하려면 변수 값을 bindValue
함수에 전달하기 전에 정수로 캐스팅하세요. 이렇게 하면 작은따옴표가 추가되지 않아 SQL 구문 오류가 해결됩니다.
수정된 코드는 다음과 같습니다.
<code class="language-php">$fetchPictures = $PDO->prepare("SELECT * FROM pictures WHERE album = :albumId ORDER BY id ASC LIMIT :skip, :max"); $fetchPictures->bindValue(':albumId', (int)$_GET['albumid'], PDO::PARAM_INT); // 强制转换为整数 if(isset($_GET['skip'])) { $fetchPictures->bindValue(':skip', (int) trim($_GET['skip']), PDO::PARAM_INT); } else { $fetchPictures->bindValue(':skip', 0, PDO::PARAM_INT); } $fetchPictures->bindValue(':max', (int)$max, PDO::PARAM_INT); // 强制转换为整数 $fetchPictures->execute() or die(print_r($fetchPictures->errorInfo())); $pictures = $fetchPictures->fetchAll(PDO::FETCH_ASSOC);</code>
핵심은 $_GET['albumid']
앞에 $max
및 bindValue
변수를 명시적으로 정수형으로 변환하는 것입니다. 이렇게 하면 PDO가 이를 문자열로 처리하고 작은따옴표를 추가하여 LIMIT 절에 구문 오류가 발생하는 것을 방지할 수 있습니다. trim()
함수는 $_GET['skip']
변수에서 추가 공백을 제거하는 데 사용됩니다.
위 내용은 SQL LIMIT 절에서 바인드 변수를 올바르게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!