>백엔드 개발 >PHP 튜토리얼 >MySQL INSERT 문에 PHP 변수를 안전하게 포함하는 방법은 무엇입니까?

MySQL INSERT 문에 PHP 변수를 안전하게 포함하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-21 18:03:23913검색

How to Safely Include PHP Variables in MySQL INSERT Statements?

MySQL 문에 PHP 변수 포함

이 시나리오에서는 특히 "contents" 테이블에 값을 삽입하는 동안 문제가 발생합니다. MySQL 문의 "VALUES" 섹션에서 PHP 변수 "$type"을 사용할 때. 적절한 접근 방식을 살펴보겠습니다.

1. 준비된 문 사용(권장)

이 방법은 귀하를 포함한 쿼리의 99%를 해결합니다. SQL 데이터 리터럴(문자열 또는 숫자)을 나타내는 모든 변수는 예외 없이 준비된 문을 통해 통합되어야 합니다. 그러나 정적 값은 있는 그대로 삽입할 수 있습니다.

준비 프로세스는 4단계로 구성됩니다.

  • SQL 문에서 변수에 대한 자리 표시자를 지정합니다.
  • 수정된 쿼리입니다.
  • 각 변수에 변수를 바인딩합니다.
  • 쿼리를 실행합니다.

다양한 데이터베이스 드라이버에서 작동하는 방법은 다음과 같습니다.

PHP 8.2를 사용하는 mysqli:

$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$mysqli->execute_query($sql, [$reporter, $description]);

이전 PHP를 사용한 mysqli 버전:

$stmt = $mysqli->prepare("INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)");
$stmt->bind_param("ss", $reporter, $description);
$stmt->execute();

PDO:

$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$reporter, $description]);

2. 쿼리 부분에 대한 화이트리스트 필터링 구현

키워드, 테이블 또는 필드 이름, 연산자 등 SQL 쿼리의 특정 부분을 나타내는 변수를 포함해야 하는 경우 "화이트리스트"를 사용하여 유효성을 확인하세요.

예를 들어 변수가 필드별 순서를 나타내는 경우:

$allowed = ["name", "price", "qty"];
$key = array_search($orderby, $allowed, true);
if ($key === false) { throw new InvalidArgumentException("Invalid field name"); }

마찬가지로 올바른 순서가 있는지 확인하세요. 지침:

$allowed = ["ASC", "DESC"];
$key = array_search($direction, $allowed, true);
if ($key === false) { throw new InvalidArgumentException("Invalid ORDER BY direction"); }

검증이 완료되면 쿼리 문자열을 준비하고 MySQL 구문에 따라 식별자를 올바르게 이스케이프 처리해야 합니다.

$query = "SELECT * FROM `table` ORDER BY `$orderby` $direction";

위 내용은 MySQL INSERT 문에 PHP 변수를 안전하게 포함하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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