> 데이터 베이스 > MySQL 튜토리얼 > PHP에서 준비된 문을 안전하게 사용하여 MySQL 데이터베이스를 쿼리하려면 어떻게 해야 합니까?

PHP에서 준비된 문을 안전하게 사용하여 MySQL 데이터베이스를 쿼리하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-12-16 10:46:12
원래의
799명이 탐색했습니다.

How Can I Securely Use Prepared Statements in PHP to Query a MySQL Database?

MySQL용 PHP의 안전한 준비된 문

MySQL 및 PHP로 작업할 때 준비된 문을 사용하는 것은 데이터베이스 보안을 보장하는 데 중요합니다. 쿼리. 준비된 문은 SQL 문을 사용자가 제공한 입력과 분리하여 SQL 주입 공격을 방어합니다.

안전한 준비된 문 생성

안전한 준비된 문을 생성하려면 다음 코드 조각을 사용하겠습니다.

$db = new mysqli("host", "user", "pw", "database");
$stmt = $db->prepare("SELECT * FROM mytable where userid=? AND category=? ORDER BY id DESC");
$stmt->bind_param('ii', intval($_GET['userid']), intval($_GET['category']));
로그인 후 복사

코드

  1. 연결 만들기: mysqli 클래스를 사용하여 MySQL 연결 개체($db)를 만듭니다.
  2. 문을 준비합니다. SQL 문을 준비하려면 연결 개체의 prepare() 메서드를 사용하세요. 자리 표시자(?)는 나중에 사용자 입력으로 대체될 매개변수를 나타냅니다.
  3. 매개변수 바인딩: 사용자가 제공한 매개변수(이 경우 $_GET)를 바인딩하려면 bind_param() 메서드를 사용하세요. ['userid'] 및 $_GET['category'])를 준비된 문.

데이터 검색

문을 준비한 후 문을 실행하고, 데이터를 검색하고, 결과를 반복할 수 있습니다.

$stmt->execute();
$stmt->store_result();
$stmt->bind_result($column1, $column2, $column3);

while ($stmt->fetch()) {
    echo "col1=$column1, col2=$column2, col3=$column3 \n";
}
로그인 후 복사

연관배열 편의성

데이터를 연관 배열로 검색하려면(예: SELECT * 쿼리의 경우) 다음 함수를 사용할 수 있습니다.

function stmt_bind_assoc(&$stmt, &$out) {
    $data = mysqli_stmt_result_metadata($stmt);
    $fields = array();
    $out = array();

    $fields[0] = $stmt;
    $count = 1;

    while ($field = mysqli_fetch_field($data)) {
        $fields[$count] = &$out[$field->name];
        $count++;
    }
    call_user_func_array(mysqli_stmt_bind_result, $fields);
}
로그인 후 복사

이 함수를 사용하면 결과를 연관 배열을 사용하면 작업하기가 더 쉬워집니다. code:

$stmt->store_result();

$resultrow = array();
stmt_bind_assoc($stmt, $resultrow);

while ($stmt->fetch()) {
    print_r($resultrow);
}
로그인 후 복사

성능 고려 사항

Prepared 문은 성능을 향상하도록 설계되었지만 페이지에서 몇 번 사용해도 큰 이점을 얻지 못할 수 있습니다. 그러나 애플리케이션이 데이터베이스 작업을 자주 수행하는 경우 명령문을 준비하면 응답 시간이 눈에 띄게 향상될 수 있습니다.

위 내용은 PHP에서 준비된 문을 안전하게 사용하여 MySQL 데이터베이스를 쿼리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿