ホームページ >データベース >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 中国語 Web サイトの他の関連記事を参照してください。