Rumah >pangkalan data >tutorial mysql >Mengapa Penyata Disediakan dalam MySQLi Penting untuk Interaksi Pangkalan Data Selamat?
Dalam coretan kod anda, anda menghadapi ralat semasa melaksanakan pernyataan yang disediakan kerana ketiadaan pengikatan parameter. Menurut dokumentasi MySQLi, penanda parameter dalam pernyataan yang disediakan mesti terikat pada pembolehubah aplikasi menggunakan mysqli_stmt_bind_param sebelum pelaksanaan.
Untuk membetulkan ralat, ubah suai kod anda seperti berikut :
$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();
Menggunakan MySQLi untuk pernyataan yang disediakan adalah disyorkan kerana ciri keselamatannya yang dipertingkatkan. Penyata yang disediakan menghalang kelemahan suntikan SQL dengan mengasingkan pertanyaan daripada nilai, mengurangkan risiko kod hasad disuntik ke dalam pangkalan data anda.
Berikut ialah contoh lengkap pernyataan yang disediakan , meliputi sambungan, sisipan dan pemilihan dengan ralat pengendalian:
<?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(); ?>
Contoh ini termasuk pengendalian ralat pada setiap langkah, memastikan pelaksanaan pertanyaan yang betul dan menyediakan mesej ralat bermaklumat sekiranya berlaku sebarang isu.
Atas ialah kandungan terperinci Mengapa Penyata Disediakan dalam MySQLi Penting untuk Interaksi Pangkalan Data Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!