집 >데이터 베이스 >MySQL 튜토리얼 >안전한 데이터베이스 상호 작용을 위해 MySQLi의 준비된 명령문이 필수적인 이유는 무엇입니까?
코드 조각에서 매개변수 바인딩이 없기 때문에 준비된 문을 실행하는 동안 오류가 발생합니다. 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를 사용하는 것이 좋습니다. 준비된 문은 쿼리를 값에서 분리하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!