>데이터 베이스 >MySQL 튜토리얼 >문자열 매개변수를 사용할 때 LIMIT가 포함된 MySQL 준비 문이 실패하는 이유는 무엇입니까?

문자열 매개변수를 사용할 때 LIMIT가 포함된 MySQL 준비 문이 실패하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-06 15:01:11984검색

Why Does My MySQL Prepared Statement with LIMIT Fail When Using String Parameters?

Prepared 문이 있는 MySQL의 LIMIT 키워드

문제:

MySQL에서 LIMIT 절과 함께 준비된 문을 사용할 때, 매개변수가 다음과 같이 전달되면 실패합니다. strings.

SELECT id, content, date
FROM comment
WHERE post = ?
ORDER BY date DESC
LIMIT ?, ?
$comments = $db->prepare($query);
$comments->execute(array($post, $min, $max));

답변:

이 문제는 PDOStatement::execute() 메소드가 모든 매개변수를 문자열로 처리하여 유효하지 않은 매개변수로 이어지기 때문에 발생합니다. SQL문. 이는 MySQL이 문자열 매개변수를 숫자로 변환하지 않아 구문 분석 오류가 발생한다는 사실로 인해 더욱 복잡해졌습니다.

해결책:

  • 매개변수 바인딩 개별적으로:
$comments->bindParam(1, $post, PDO::PARAM_STR);
$comments->bindParam(2, $min, PDO::PARAM_INT);
$comments->bindParam(3, $min, PDO::PARAM_INT);
  • sprintf()를 사용하여 숫자 매개변수를 하드코드합니다:
$query = sprintf('SELECT id, content, date
    FROM comment
    WHERE post = ?
    ORDER BY date DESC
    LIMIT %d, %d', $min, $max);
  • 에뮬레이션 비활성화 준비:
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

위 내용은 문자열 매개변수를 사용할 때 LIMIT가 포함된 MySQL 준비 문이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.