Rumah > Artikel > pangkalan data > Adakah Penyata Disediakan Memerlukan `mysql_real_escape_string()` untuk Keselamatan?
Soalan:
Adakah perlu menggunakan fungsi mysql_real_escape_string() yang disediakan pernyataan untuk pertanyaan pangkalan data?
Konteks:
Kod yang disediakan menunjukkan pertanyaan pernyataan yang disediakan menggunakan perpustakaan mysqli. Walau bagaimanapun, pada masa ini ia menggunakan fungsi mysql_real_escape_string() untuk membersihkan input pengguna.
<code class="php">$consulta = $_REQUEST["term"]."%"; ($sql = $db->prepare('select location from location_job where location like ?')); $sql->bind_param('s', $consulta); $sql->execute();</code>
Jawapan:
Tidak, pernyataan yang disediakan memberikan perlindungan yang wujud terhadap suntikan SQL dan manipulasi data apabila digunakan dengan betul. Mereka membersihkan input secara automatik, menjadikan mysql_real_escape_string() berlebihan.
Peningkatan:
Semasa pertanyaan menggunakan pernyataan yang disediakan dengan betul, pengubahsuaian kecil boleh meningkatkan kecekapannya. Daripada menggunakan kaedah bind_param(), kaedah execute() boleh digunakan untuk menghantar parameter secara langsung.
<code class="php">$sql->execute([$consulta]);</code>
Nota Tambahan:
Walaupun kenyataan yang disediakan melindungi terhadap suntikan SQL, mereka tidak memastikan keselamatan data apabila mengeluarkannya ke halaman. Untuk mengelakkan kemungkinan serangan skrip merentas tapak (XSS), anda disyorkan untuk menggunakan htmlspecialchars() untuk mengekod HTML mana-mana data sebelum mengeluarkannya ke penyemak imbas.
Atas ialah kandungan terperinci Adakah Penyata Disediakan Memerlukan `mysql_real_escape_string()` untuk Keselamatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!