>백엔드 개발 >PHP 튜토리얼 >변수 LIKE 조건을 사용하여 안전한 MySQLi 준비 명령문을 작성하는 방법은 무엇입니까?

변수 LIKE 조건을 사용하여 안전한 MySQLi 준비 명령문을 작성하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-04 11:39:151457검색

How to Build a Secure MySQLi Prepared Statement with Variable LIKE Conditions?

변수 LIKE 조건을 사용하여 mysqli 준비된 문으로 SELECT 쿼리 작성

사용자 입력으로 작업할 때 이를 방지하기 위한 문을 준비하는 것이 중요합니다. SQL 주입 및 데이터 무결성 보장. LIKE 조건의 수가 가변적이면 이는 어려워집니다.

문제 개요

코드 조각은 사용자 입력을 기반으로 LIKE 조건을 동적으로 생성하여 이 문제를 해결하려고 시도합니다. . 그러나 준비된 문의 매개변수 형식을 올바르게 지정하지 못합니다.

해결책

해결책은 자리 표시자가 아닌 매개변수 주위에 % 와일드카드를 배치하는 것입니다. 이렇게 하면 쿼리를 필터링하는 데 매개변수가 사용됩니다.

자세한 설명

  1. 재료 초기화:

    아. OR를 사용하여 WHERE 절 표현식의 배열을 만듭니다.
    b. 값의 데이터 유형을 결정합니다(이 경우 문자열).
    c. 데이터 유형과 매개변수를 단일 배열로 결합합니다.

  2. 조건 준비:

    a. 사용자 입력을 고유한 값의 배열로 변환합니다.
    b. 각 값에 대해 LIKE 표현식을 만듭니다.
    c. 데이터 유형과 와일드카드 값을 포함하도록 매개변수 배열을 업데이트합니다.

  3. 쿼리 준비:

    a. 기본적인 SELECT * 쿼리로 시작하세요.
    b. 조건이 있는 경우 동적 표현식과 함께 WHERE 절을 추가합니다.

  4. 매개변수 바인딩 및 실행:

    a. 표시 연산자(...)를 사용하여 매개변수 배열을 준비된 명령문에 바인딩합니다.
    b. 명령문을 실행하고 결과가 있으면 검색합니다.

예제 코드:

$string = "Bill N_d Dave";

$conditions = [];
$parameters = [''];
foreach (array_unique(explode(' ', $string)) as $value) {
    $conditions[] = "name LIKE ?";
    $parameters[0] .= 's';
    $parameters[] = "%{$value}%";
}

$query = "SELECT * FROM info";
if ($conditions) {
    $stmt = $mysqli->prepare($query . ' WHERE ' . implode(' OR ', $conditions));
    $stmt->bind_param(...$parameters);
    $stmt->execute();
    $result = $stmt->get_result();
} else {
    $result = $conn->query($query);
}

foreach ($result as $row) {
    echo "<div>{$row['name']}</div>\n";
}

추가 참고 사항:

  • 조건이 지정되지 않은 경우 조건 없이 쿼리를 실행합니다. WHERE 절.
  • 필요한 경우 사용자 입력에서 와일드카드를 이스케이프하려면 addcslashes()를 사용하는 것이 좋습니다.

위 내용은 변수 LIKE 조건을 사용하여 안전한 MySQLi 준비 명령문을 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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