MySQL 문에 PHP 변수 포함
이 시나리오에서는 특히 "contents" 테이블에 값을 삽입하는 동안 문제가 발생합니다. MySQL 문의 "VALUES" 섹션에서 PHP 변수 "$type"을 사용할 때. 적절한 접근 방식을 살펴보겠습니다.
1. 준비된 문 사용(권장)
이 방법은 귀하를 포함한 쿼리의 99%를 해결합니다. SQL 데이터 리터럴(문자열 또는 숫자)을 나타내는 모든 변수는 예외 없이 준비된 문을 통해 통합되어야 합니다. 그러나 정적 값은 있는 그대로 삽입할 수 있습니다.
준비 프로세스는 4단계로 구성됩니다.
다양한 데이터베이스 드라이버에서 작동하는 방법은 다음과 같습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!