Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengoptimumkan Penggunaan Penyata Disediakan dalam PHP dengan MySQLi?

Bagaimanakah Saya Boleh Mengoptimumkan Penggunaan Penyata Disediakan dalam PHP dengan MySQLi?

Susan Sarandon
Susan Sarandonasal
2024-12-19 09:31:12894semak imbas

How Can I Optimize Prepared Statement Usage in PHP with MySQLi?

Penggunaan Penyata Disediakan Dioptimumkan dalam PHP dengan MySQLi

Kod anda nampaknya tiada pengikatan parameter pada pernyataan yang disediakan. Mengikut dokumentasi mysqli::prepare, penanda parameter mesti diikat sebelum melaksanakan pernyataan.

// Bind parameters for the first insertion
$name1 = 'one';
$age1  = 1;
$stmt->bind_param('si', $name1, $age1);

// Execute for the first insertion
$stmt->execute();

// Bind parameters for the second insertion
$name2 = 'two';
$age2  = 1;
$stmt->bind_param('si', $name2, $age2);

// Execute for the second insertion
$stmt->execute();

Kelebihan mysqli

Walaupun mysqli bukan satu-satunya perpustakaan yang menyokong kenyataan yang disediakan, ia menawarkan beberapa kelebihan:

  • Keselamatan yang dipertingkatkan: Penyataan yang disediakan melindungi daripada serangan suntikan SQL dengan menghalang pelaksanaan pertanyaan SQL sewenang-wenangnya.
  • Prestasi yang dipertingkatkan: Penyataan yang disediakan menggunakan semula pertanyaan yang dihuraikan, yang membawa kepada peningkatan kecekapan.
  • Pengendalian ralat: Penyataan yang disediakan memberikan pelaporan ralat dan keupayaan pengendalian yang lebih baik.

Contoh Lengkap dengan Pengendalian Ralat

Berikut ialah contoh lengkap menggunakan pernyataan yang disediakan dalam PHP dengan MySQLi, termasuk ralat pengendalian:

// Database connection
$mysqli = new mysqli("localhost", "root", "root", "test");

if ($mysqli->connect_errno) {
    echo "Failed to connect: " . $mysqli->connect_error;
    exit;
}

// Prepare statement
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");

if (!$stmt) {
    echo "Prepare failed: " . $mysqli->error;
    exit;
}

// Bind parameters for the first insertion
$name1 = 'one';
$age1  = 1;
$stmt->bind_param('si', $name1, $age1);

// Execute for the first insertion
$stmt->execute();

if ($stmt->errno) {
    echo "Execution failed: " . $stmt->error;
    exit;
}

// Bind parameters for the second insertion
$name2 = 'two';
$age2  = 1;
$stmt->bind_param('si', $name2, $age2);

// Execute for the second insertion
$stmt->execute();

if ($stmt->errno) {
    echo "Execution failed: " . $stmt->error;
    exit;
}

// Selection statement
$stmt = $mysqli->prepare("SELECT * FROM users WHERE age = ?");

if (!$stmt) {
    echo "Prepare failed: " . $mysqli->error;
    exit;
}

// Bind parameters for selection
$age  = 1;
$stmt->bind_param('i', $age);

// Execute selection
$stmt->execute();

if ($stmt->errno) {
    echo "Execution failed: " . $stmt->error;
    exit;
}

// Fetch results
$result = $stmt->get_result();

if (!$result) {
    echo "Fetch failed: " . $stmt->error;
    exit;
}

while ($row = $result->fetch_assoc()) {
    echo $row['name'] . " " . $row['age'] . "<br>";
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Penggunaan Penyata Disediakan dalam PHP dengan MySQLi?. 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