Rumah > pangkalan data > tutorial mysql > Adakah data melarikan diri masih diperlukan apabila menggunakan PDO dan Penyata Disediakan?

Adakah data melarikan diri masih diperlukan apabila menggunakan PDO dan Penyata Disediakan?

Susan Sarandon
Lepaskan: 2024-11-07 04:58:02
asal
690 orang telah melayarinya

Is data escaping still necessary when using PDO and Prepared Statements?

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan