Rumah >pangkalan data >tutorial mysql >Bagaimanakah Penyata Disediakan Boleh Meningkatkan Kecekapan dan Keselamatan Carian LIKE?

Bagaimanakah Penyata Disediakan Boleh Meningkatkan Kecekapan dan Keselamatan Carian LIKE?

Susan Sarandon
Susan Sarandonasal
2025-01-16 10:57:58327semak imbas

How Can Prepared Statements Improve the Efficiency and Security of LIKE Searches?

Mengoptimumkan LIKE Carian dengan Penyata Disediakan

Pertanyaan pangkalan data menggunakan operator LIKE untuk pemadanan corak memerlukan pengendalian yang teliti untuk mengelakkan kelemahan dan memastikan prestasi. Penggunaan yang tidak betul boleh membawa kepada ralat.

Mari kita periksa beberapa pendekatan yang cacat:

<code class="language-sql">$sql = 'SELECT * FROM `users` WHERE username LIKE \'%{?}%\' ';</code>

Ini gagal kerana bilangan pembolehubah dalam rentetan SQL tidak sepadan dengan parameter yang diberikan kepada bind_param().

<code class="language-sql">$sql = 'SELECT * FROM `users` WHERE username LIKE %{?}% ';</code>

Ini mengakibatkan ralat sintaks disebabkan peletakan aksara kad bebas (%{}) yang salah dalam rentetan pertanyaan.

Kaedah yang betul menggunakan pernyataan yang disediakan, menggunakan pemegang tempat tanda soal dan mengikat pembolehubah dengan sewajarnya:

<code class="language-php">$likeVar = "%" . $yourParam . "%";
$stmt = $mysqli->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->bind_param("s", $likeVar);
$stmt->execute();</code>

Kod ini:

  1. Membina corak dengan menggabungkan tanda peratusan kepada input pengguna ($yourParam).
  2. Menyediakan pertanyaan dengan ? pemegang tempat.
  3. Mengikat rentetan corak ("s" untuk rentetan) menggunakan bind_param().
  4. Melaksanakan pernyataan yang disediakan.

Menggunakan pernyataan yang disediakan dengan LIKE menghalang suntikan SQL dan meningkatkan kecekapan pertanyaan.

Atas ialah kandungan terperinci Bagaimanakah Penyata Disediakan Boleh Meningkatkan Kecekapan dan Keselamatan Carian LIKE?. 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