Rumah >pangkalan data >tutorial mysql >Mengapa Penyata Disediakan dalam MySQLi Penting untuk Interaksi Pangkalan Data Selamat?

Mengapa Penyata Disediakan dalam MySQLi Penting untuk Interaksi Pangkalan Data Selamat?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-23 05:31:19927semak imbas

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

Memahami Ralat dalam Perlaksanaan Penyata Disediakan

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.

Parameter Mengikat dan Menyelesaikan Ralat

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();

Keperluan Menggunakan MySQLi untuk Penyata Disediakan

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.

Contoh Komprehensif Penyata Disediakan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn