Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Membina Kenyataan Secure MySQLi Disediakan dengan Keadaan LIKE Pembolehubah?

Bagaimana untuk Membina Kenyataan Secure MySQLi Disediakan dengan Keadaan LIKE Pembolehubah?

DDD
DDDasal
2024-12-04 11:39:151430semak imbas

How to Build a Secure MySQLi Prepared Statement with Variable LIKE Conditions?

Membina Pertanyaan PILIH dengan Keadaan Pembolehubah LIKE sebagai Penyata Disediakan mysqli

Apabila bekerja dengan input pengguna, adalah penting untuk menyediakan kenyataan untuk mengelakkan Suntikan SQL dan memastikan integriti data. Ini menjadi mencabar apabila bilangan keadaan LIKE berubah-ubah.

Gambaran Keseluruhan Masalah

Coretan kod cuba menyelesaikan isu ini dengan mencipta keadaan LIKE secara dinamik berdasarkan input pengguna . Walau bagaimanapun, ia gagal memformatkan parameter dengan betul untuk pernyataan yang disediakan.

Penyelesaian

Penyelesaian terletak pada meletakkan % kad bebas di sekeliling parameter, bukan pemegang tempat. Ini memastikan bahawa parameter digunakan untuk menapis pertanyaan.

Penjelasan Terperinci

  1. Memulakan Bahan:

    a. Cipta tatasusunan ungkapan klausa WHERE menggunakan OR.
    b. Tentukan jenis data bagi nilai (dalam kes ini, rentetan).
    c. Gabungkan jenis data dan parameter ke dalam tatasusunan tunggal.

  2. Sediakan Syarat:

    a. Tukar input pengguna kepada tatasusunan nilai unik.
    b. Untuk setiap nilai, cipta ungkapan SUKA.
    c. Kemas kini tatasusunan parameter untuk memasukkan jenis data dan nilai kad bebas.

  3. Sediakan Pertanyaan:

    a. Mulakan dengan pertanyaan SELECT * asas.
    b. Jika terdapat syarat, tambah klausa WHERE dengan ungkapan dinamik.

  4. Ikat Parameter dan Laksanakan:

    a. Ikat tatasusunan parameter pada pernyataan yang disediakan menggunakan operator percikan (...).
    b. Laksanakan pernyataan dan dapatkan semula keputusan jika ada.

Contoh Kod:

$string = "Bill N_d Dave";

$conditions = [];
$parameters = [''];
foreach (array_unique(explode(' ', $string)) as $value) {
    $conditions[] = "name LIKE ?";
    $parameters[0] .= 's';
    $parameters[] = "%{$value}%";
}

$query = "SELECT * FROM info";
if ($conditions) {
    $stmt = $mysqli->prepare($query . ' WHERE ' . implode(' OR ', $conditions));
    $stmt->bind_param(...$parameters);
    $stmt->execute();
    $result = $stmt->get_result();
} else {
    $result = $conn->query($query);
}

foreach ($result as $row) {
    echo "<div>{$row['name']}</div>\n";
}

Nota Tambahan:

  • Jika tiada syarat dinyatakan, laksanakan pertanyaan tanpa WHERE klausa.
  • Pertimbangkan untuk menggunakan addcslashes() untuk melepaskan kad bebas dalam input pengguna, jika perlu.

Atas ialah kandungan terperinci Bagaimana untuk Membina Kenyataan Secure MySQLi Disediakan dengan Keadaan LIKE Pembolehubah?. 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