Rumah >pangkalan data >tutorial mysql >Adakah data melarikan diri masih diperlukan apabila menggunakan PDO dan Penyata Disediakan?
Menggantikan mysql_* Fungsi dengan PDO dan Penyata Disediakan
Soalan:
Semasa menggunakan mysql_ * fungsi, adakah masih perlu menggunakan mysql_real_escape_string untuk melarikan data sebelum membuat pertanyaan? Jika ya, bagaimanakah ia berfungsi dengan PDO dan pernyataan yang disediakan?
Jawapan:
Melepaskan diri dengan mysql_real_escape_string
mysql_real_sscape_string aksara khas dalam input pengguna untuk mengelakkan serangan suntikan SQL. Walau bagaimanapun, ia terhad kepada rentetan melarikan diri dan tidak boleh mengendalikan jenis data lain. Ia juga memerlukan sambungan MySQL aktif, yang tidak diperlukan apabila menggunakan PDO.
PDO dan Penyata Disediakan
PDO (Objek Data PHP) menyediakan antara muka yang konsisten kepada pelbagai pemacu pangkalan data, termasuk MySQL. Penyata yang disediakan ialah ciri penting PDO yang membolehkan anda melaksanakan pertanyaan pangkalan data dengan selamat dengan menggantikan ruang letak dinamik dengan nilai yang dipratentukan.
Apabila menggunakan pernyataan yang disediakan, pertanyaan SQL disediakan terlebih dahulu dan hanya nilai dinamik disediakan pada masa pelaksanaan. Ini memastikan bahawa pertanyaan dihuraikan dan disahkan oleh pelayan pangkalan data, menjadikannya kebal terhadap serangan suntikan SQL.
Parameter Mengikat dengan PDO
Untuk mengikat parameter dalam PDO, anda menggunakan kaedah bindParam(). Parameter pertama ialah nama pemegang tempat, yang boleh sama ada pemegang tempat bernama (cth., :nama pengguna) atau pemegang tempat tanda soal (?):
``php
$stmt->bindParam(' :username', $username, PDO::PARAM_STR);
``
Untuk rentetan, anda boleh menentukan panjang ruang letak menggunakan jenis PDO::PARAM_STR_CHAR(panjang). Ini berguna apabila memasukkan data ke dalam medan dengan had saiz tertentu:
``php
$stmt->bindParam(':username', $username, PDO::PARAM_STR_CHAR(25));
``
Pengendalian Data Selamat
Dengan menggunakan PDO dan pernyataan yang disediakan, anda tidak perlu melepaskan input pengguna secara manual. Nilai pemegang tempat diikat dengan selamat pada pertanyaan dan dilaksanakan oleh pelayan pangkalan data. Ini menyediakan mekanisme keselamatan yang lebih mantap dan komprehensif daripada menggunakan mysql_real_escape_string sahaja.
Contoh Pertanyaan Sisipan dengan PDO
``php
$stmt = $dbh-> ;prepare('INSERT INTO users (username, email) VALUES (:username, :email)');
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
$stmt->execute();
``
Atas ialah kandungan terperinci Adakah data melarikan diri masih diperlukan apabila menggunakan PDO dan Penyata Disediakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!