집 >데이터 베이스 >MySQL 튜토리얼 >PDO에서 ORDER BY 절 매개변수와 함께 준비된 명령문을 어떻게 안전하게 사용할 수 있습니까?
준비된 PDO 문을 사용하여 ORDER BY 매개변수 설정
준비된 PDO 문을 사용하여 SQL 쿼리를 실행하는 경우 설정을 시도할 때 어려움이 발생할 수 있습니다. ORDER BY 절 내의 매개변수. 이 문서에서는 제한 사항을 살펴보고 대체 솔루션을 제공하여 이 문제를 해결합니다.
직접 SQL 삽입
WHERE 절에서 매개변수를 사용하는 것은 기능적이지만 이를 ORDER에 적용합니다. BY 절은 문제가 있는 것으로 판명되었습니다. 이 제한을 우회하려면 SQL 쿼리에 직접 삽입해야 합니다. 그러나 이 접근 방식에서는 아래와 같이 쿼리의 보안과 무결성을 보장하기 위해 엄격한 예방 조치가 필요합니다.
$order = 'columnName'; $direction = 'ASC'; $query = "SELECT * from table WHERE column = :my_param ORDER BY $order $direction";
하드코딩 연산자 및 식별자
모든 연산자 및 식별자 ORDER BY 절 내의 내용은 다음과 같이 스크립트에 하드코딩되어야 합니다.
$orders = array("name", "price", "qty"); $key = array_search($_GET['sort'], $orders); $order = $orders[$key]; $query = "SELECT * from table WHERE is_live = :is_live ORDER BY $order";
방향에도 동일한 원칙이 적용됩니다.
화이트리스트 도우미 기능
필요한 코드 양을 최소화하기 위해 화이트리스트 도우미 기능을 사용할 수 있습니다.
$order = white_list($order, ["name", "price", "qty"], "Invalid field name"); $direction = white_list($direction, ["ASC", "DESC"], "Invalid ORDER BY direction"); $sql = "SELECT field from table WHERE column = ? ORDER BY $order $direction";
값을 확인하여 유효하지 않은 경우 오류를 발생시키는 함수입니다. 이 기술은 데이터 검증 및 보안을 보장합니다.
위 내용은 PDO에서 ORDER BY 절 매개변수와 함께 준비된 명령문을 어떻게 안전하게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!