>데이터 베이스 >MySQL 튜토리얼 >안전한 데이터베이스 상호 작용을 위해 MySQLi의 준비된 명령문이 필수적인 이유는 무엇입니까?

안전한 데이터베이스 상호 작용을 위해 MySQLi의 준비된 명령문이 필수적인 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-23 05:31:19927검색

Why Are Prepared Statements in MySQLi Essential for Secure Database Interactions?

Prepared 문 실행 오류 이해

코드 조각에서 매개변수 바인딩이 없기 때문에 준비된 문을 실행하는 동안 오류가 발생합니다. MySQLi 문서에 따르면 준비된 문의 매개변수 표시자는 실행 전에 mysqli_stmt_bind_param을 사용하여 애플리케이션 변수에 바인딩되어야 합니다.

매개변수 바인딩 및 오류 해결

오류를 수정하려면 다음과 같이 코드를 수정하세요. :

$name = 'one';
$age  = 1;

$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");

// Bind parameters to application variables (string & integer in this case)
$stmt->bind_param('si', $name, $age);

// Execute the prepared statement after binding
$stmt->execute();

준비를 위한 MySQLi 활용의 필요성 명령문

보안 기능이 강화된 준비된 명령문에는 MySQLi를 사용하는 것이 좋습니다. 준비된 문은 쿼리를 값에서 분리하여 SQL 주입 취약점을 방지하고, 악성 코드가 데이터베이스에 삽입될 위험을 줄입니다.

준비된 문 종합 예

다음은 준비된 문의 전체 예입니다. , 연결, 삽입 및 선택에 오류 처리 포함:

<?php

// Database connection
$mysqli = new mysqli("localhost", "root", "root", "test");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit;
}

// Prepare statement for insertion
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?, ?)");
if (!$stmt) {
    echo "Error preparing statement: " . $mysqli->error;
    exit;
}

// Bind parameters and execute insertion
$name = 'one';
$age  = 1;
$stmt->bind_param('si', $name, $age);
if (!$stmt->execute()) {
    echo "Error executing statement: " . $stmt->error;
    exit;
}

// Prepare statement for selection
$stmt = $mysqli->prepare("SELECT name, age FROM users WHERE id = ?");
if (!$stmt) {
    echo "Error preparing statement: " . $mysqli->error;
    exit;
}

// Bind parameter and execute selection
$id = 1;
$stmt->bind_param('i', $id);
if (!$stmt->execute()) {
    echo "Error executing statement: " . $stmt->error;
    exit;
}

// Retrieve and display results
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    echo "Name: " . $row['name'] . ", Age: " . $row['age'] . "<br>";
}

// Close statement and connection
$stmt->close();
$mysqli->close();
?>

이 예에는 올바른 실행을 보장하는 각 단계의 오류 처리가 포함되어 있습니다. 문제 발생 시 문의사항을 접수하고 유익한 오류 메시지를 제공합니다.

위 내용은 안전한 데이터베이스 상호 작용을 위해 MySQLi의 준비된 명령문이 필수적인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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