PHP PDO 준비 문에서 식별자와 키워드를 바인딩할 수 있나요?

Mary-Kate Olsen
풀어 주다: 2024-11-24 11:34:10
원래의
965명이 탐색했습니다.

Can I Bind Identifiers and Keywords in PHP PDO Prepared Statements?

PHP PDO 준비된 문의 바인딩 식별자 및 구문 키워드

동적 쿼리를 사용하면 테이블 이름, 열을 정의하는 변수를 활용하여 유연한 데이터베이스 작업이 가능합니다. 이름, 검색 값. 그러나 PDO 준비된 문을 사용하는 바인딩 식별자(테이블 또는 필드 이름) 또는 구문 키워드는 예기치 않은 결과를 초래할 수 있습니다.

문제:

bindParam() 또는 binValue를 사용하는 경우 () 식별자 또는 구문 키워드를 나타내는 변수를 바인딩하려면 예상 데이터베이스 대신 빈 배열이 반환됩니다.

설명:

PDO 준비된 문은 데이터 리터럴만 바인딩할 수 있습니다. 따라서 식별자나 키워드를 결합하려고 하면 원하는 결과가 나오지 않습니다.

해결책:

안전하고 안정적인 동적 쿼리를 생성하려면 다음이 중요합니다.

  • 식별자의 형식을 올바르게 지정하세요. 식별자를 백틱(')으로 묶으세요. 백틱을 두 배로 늘려(```) 내부에서 이스케이프합니다.
  • 화이트리스트 사용: 잠재적인 삽입을 방지하기 위해 하드코딩된 허용 값 목록에 대해 동적 식별자를 검증합니다.
  • 구문 키워드에 동일한 규칙을 적용합니다. 동적에서 사용되는 모든 구문 키워드를 화이트리스트에 추가하고 유효성을 검사합니다. 쿼리.

코드 예:

식별자 형식 지정 및 확인:

$field = "`" . str_replace("`", "``", $field) . "`";
로그인 후 복사

키워드 허용 목록 및 확인:

$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; 
로그인 후 복사

그런 다음 준비된 변수에 정리된 변수를 포함시킵니다. 성명:

$stmt = $db->prepare('
    SELECT 
        * 
    FROM 
        ?
    WHERE 
        ? LIKE ?
');
$stmt->bindParam(1, $searchTable);
$stmt->bindParam(2, $searchBy);
$stmt->bindValue(3, '%' . $searchTerm . '%');
로그인 후 복사

이러한 규칙을 준수함으로써 동적 데이터베이스 쿼리의 유효성과 보안을 보장할 수 있습니다.

위 내용은 PHP PDO 준비 문에서 식별자와 키워드를 바인딩할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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