준비된 문이 데이터베이스 식별자와 키워드를 처리할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-11-18 18:46:02
원래의
592명이 탐색했습니다.

Can Prepared Statements Handle Database Identifiers and Keywords?

준비된 문: 식별자와 키워드를 처리할 수 있나요?

동적 쿼리는 변수를 활용하여 테이블, 필드 및 검색 값을 지정합니다. 쿼리에 변수를 연결하는 것이 성공적인 것으로 입증되었지만 PDO의 binParam() 또는 binValue()를 사용하여 변수를 바인딩하면 빈 배열이 생성됩니다.

작동하지 않는 이유:

PDO 준비된 문은 데이터 리터럴에 대한 자리 표시자만 허용합니다. 자리 표시자를 사용하여 식별자(테이블 또는 필드 이름) 또는 키워드를 나타내려고 하면 작동하지 않습니다.

해결책:

  • 식별자: 식별자를 나타내는 변수를 포함하려면 다음을 따르세요. 규칙:

    • 식별자를 백틱(`)으로 묶습니다.
    • 변수 내의 백틱을 두 배로 늘려 이스케이프합니다. (``).
  • 키워드:

    • 사용자가 제공한 키워드를 화이트리스트와 비교하세요.
    • 허용 목록에 있는 키워드만 사용하세요. 쿼리.

예제 코드:

// Safely format identifier
$field = "`" . str_replace("`", "``", $field) . "`";
$sql = "SELECT * FROM t ORDER BY $field";

// Whitelist keyword
$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC';
$sql = "SELECT * FROM t ORDER BY field $dir";
로그인 후 복사

위 내용은 준비된 문이 데이터베이스 식별자와 키워드를 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿