> 데이터 베이스 > MySQL 튜토리얼 > PDO 준비된 문이 테이블 및 열 이름 또는 SQL 키워드를 바인딩할 수 있습니까?

PDO 준비된 문이 테이블 및 열 이름 또는 SQL 키워드를 바인딩할 수 있습니까?

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

Can PDO Prepared Statements Bind Table and Column Names, or SQL Keywords?

PDO 준비 문이 식별자나 구문 키워드를 바인딩할 수 있나요?

테이블을 나타내는 변수로 동적 쿼리를 구성하려고 하면 필드 /column 및 검색할 값 때문에 PDO의 준비된 문을 활용할 때 예상치 못한 어려움이 발생할 수 있습니다. 특히, 이러한 변수를 바인딩하기 위해 BindParam() 또는 BindValue()를 사용하면 빈 결과 세트가 발생할 수 있습니다.

문제의 핵심을 자세히 살펴보려면 PDO 자리 표시자가 데이터 리터럴을 나타내도록 지정되었다는 점을 이해하는 것이 중요합니다. 따라서 이를 식별자(예: 테이블 또는 필드 이름) 또는 구문 키워드(예: "LIKE")로 사용하려고 하면 잘못된 동작이 발생할 수 있습니다.

특히 PDO는 바인딩 식별자에 대한 기본 지원을 제공하지 않습니다. . 이는 개발자가 이러한 식별자를 직접 처리할 책임을 져야 함을 의미합니다. 적절한 실행을 보장하려면 다음과 같은 엄격한 규칙을 준수해야 합니다.

결합 식별자 규칙:

  1. 백틱 안에 식별자를 묶습니다.
  2. 이중화하여 식별자 내의 백틱을 이스케이프합니다.

이러한 형식 지정 규칙은 구문 오류 및 SQL 주입 취약점을 방지합니다.

구문 키워드 바인딩 규칙:

  1. 동안 키워드 형식을 사용할 수 없으므로 화이트리스트 작성이 중요합니다.
  2. 동적인지 확인하세요. 키워드는 임의의 키워드 대체를 방지하기 위해 허용된 값 목록과 일치합니다.

예:

앞서 언급한 규칙을 준수하는 다음 코드 조각을 고려하세요.

$allowed = array("name", "price", "qty");
$key = array_search($_GET['field'], $allowed);
$field = $allowed[$key];
$query = "SELECT $field FROM t"; // Value is safe
로그인 후 복사

요약하자면 PDO 준비된 문은 데이터 리터럴 바인딩에 탁월하지만 바인딩 지원이 부족합니다. 식별자 또는 구문 키워드. 개발자는 개략적인 규칙을 성실히 따르면 이러한 중요한 구성 요소를 활용하는 동적 쿼리를 안전하고 정확하게 실행할 수 있습니다.

위 내용은 PDO 준비된 문이 테이블 및 열 이름 또는 SQL 키워드를 바인딩할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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