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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-24 10:25:12650검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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