집 >데이터 베이스 >MySQL 튜토리얼 >PDO 준비 문과 함께 ORDER BY 매개변수를 어떻게 안전하게 사용할 수 있습니까?
PDO 준비된 문: ORDER BY 매개변수 설정
준비된 PDO 문으로 작업할 때 매개변수를 사용하려고 할 때 어려움을 겪을 수 있습니다. ORDER BY 절. 명령문은 오류 없이 실행되지만 결과가 반환되지 않을 수 있습니다.
이 문제를 해결하려면 다음 코드에 설명된 대로 ORDER BY 인수를 SQL 문에 직접 삽입해야 합니다.
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
모든 연산자와 식별자가 동적으로 생성되지 않고 하드코딩되었는지 확인하는 것이 중요합니다. 이 접근 방식은 주입 공격을 방지하는 데 도움이 됩니다.
코드 보안을 강화하는 또 다른 방법은 아래와 같은 화이트리스트 도우미 기능을 사용하는 것입니다.
function white_list($value, $allowed_values, $error_message) { if (!in_array($value, $allowed_values)) { throw new Exception($error_message); } else { return $value; } }
이 기능을 사용하면 입력한 값이 미리 정의된 유효한 값 목록에 있는지 확인하고, 없으면 오류를 발생시킬 수 있습니다.
이 접근 방식을 활용하면 준비된 문은 안전하고 ORDER BY 매개변수를 올바르게 처리할 수 있습니다.
$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"; $stmt = $db->prepare($sql); $stmt->execute([$is_live]);
위 내용은 PDO 준비 문과 함께 ORDER BY 매개변수를 어떻게 안전하게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!