Prepared 문이 동적 테이블 이름을 처리할 수 있습니까?
안타깝게도 테이블 이름에 자리 표시자가 있는 MySQL 준비된 문을 실행하려고 했습니다. , 이는 지원되는 기능이 아닙니다. 준비된 문은 테이블 이름과 같은 구조적 요소가 아닌 SQL 문의 "값" 섹션에 매개변수를 바인딩하도록 설계되었습니다.
데이터베이스 수준에서 테이블 이름을 수정하면 문의 유효성이 변경될 수 있으며 이는 사전 컴파일 범위를 벗어납니다. 자리 표시자를 어디에서나 사용할 수 있도록 허용하는 데이터베이스 인터페이스에서도 자리 표시자의 값은 여전히 문자열로 변환되므로 SELECT * FROM ? 는 실제로 잘못된 SQL(예: `SELECT * FROM 'mytable' ' )을 보냅니다.
이러한 주입을 피하는 가장 좋은 방법은 화이트리스트 확인을 사용하는 것입니다. 쿼리를 작성하기 전에 입력한 테이블 이름이 사전 승인된 목록에 있는지 확인하세요. 이렇게 하면 안전한 테이블 이름만 사용되어 SQL 주입 위험이 완화됩니다.
위 내용은 준비된 문이 SQL에서 동적 테이블 이름을 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!