코드 조각에서 매개변수 바인딩이 없기 때문에 준비된 문을 실행하는 동안 오류가 발생합니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!