>백엔드 개발 >PHP 튜토리얼 >PHP에서 준비된 명령문을 사용하여 MySQL에서 데이터를 안전하게 검색하려면 어떻게 해야 합니까?

PHP에서 준비된 명령문을 사용하여 MySQL에서 데이터를 안전하게 검색하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-20 13:07:10349검색

How Can I Securely Retrieve Data from MySQL Using Prepared Statements in PHP?

PHP의 안전한 MySQL 준비 문

PHP에서 SQL 쿼리 작업을 수행할 때 준비된 문을 사용하여 보안의 우선순위를 지정하는 것이 중요합니다. 다음은 URL 매개변수의 입력을 사용하여 열을 검색하는 안전한 준비된 명령문을 생성하는 방법입니다.

MySQL Improved(MySQLi) 활용:

$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']));
$stmt->execute();

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

while ($stmt->fetch()) {
    echo "col1=$column1, col2=$column2, col3=$column3 \n";
}

$stmt->close();

또는 이 도우미 기능을 사용하여 연관 배열 바인딩:

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);
}

사용하려면 it:

$stmt->store_result();

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

while ($stmt->fetch()) {
    print_r($resultrow);
}

성능 향상

준비된 명령문은 쿼리를 다시 구문 분석하고 다시 계획할 필요성을 최소화하여 성능을 향상시킵니다. 그러나 한 페이지에서 몇 번만 사용하면 속도에 미치는 영향이 크지 않을 수 있습니다. 그럼에도 불구하고 SQL 주입 취약점에 대한 보안 강화 및 보호를 위해 여전히 권장되는 방법입니다.

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

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