PDO 매개변수: 테이블 또는 열 이름을 입력으로 허용할 수 있나요?
준비된 PDO에 테이블 이름을 매개변수로 포함하려고 합니다. 아래 코드 조각에 설명된 대로 명령문의 결과는 다음과 같습니다. 실패:
$stmt = $dbh->prepare('SELECT * FROM :table WHERE 1'); if ($stmt->execute(array(':table' => 'users'))) { var_dump($stmt->fetchAll()); }
왜 이것이 불가능합니까?
PDO 매개변수는 쿼리 실행 중에 동적으로 할당되는 데이터 값을 위한 것입니다. 반면, 테이블 및 열 이름은 데이터베이스 스키마의 정적 요소이므로 매개변수화에 적합하지 않습니다.
테이블 이름 포함을 위한 안전한 대안
안전하게 삽입하려면 테이블 이름을 SQL 쿼리에 추가하려면 데이터를 수동으로 필터링하고 삭제하는 것이 좋습니다. 이는 쿼리를 동적으로 실행하는 함수에 화이트리스트에 포함된 switch() 문을 통합하여 달성할 수 있습니다.
function buildQuery( $get_var ) { switch($get_var) { case 1: $tbl = 'users'; break; } $sql = "SELECT * FROM $tbl"; }
특정 사례를 설정하고 유효하지 않은 시나리오를 처리하면 쿼리는 허용된 경우에만 실행됩니다. 테이블 이름. 이 접근 방식을 사용하면 사용자 입력이 SQL 쿼리에 직접적인 영향을 주지 않고 데이터 무결성이 유지됩니다.
위 내용은 PDO 매개변수를 SQL 쿼리의 테이블 또는 열 이름에 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!