Rumah > pangkalan data > tutorial mysql > Bagaimana Menggunakan Kad Liar dengan Penyata Disediakan PDO dengan Betul?

Bagaimana Menggunakan Kad Liar dengan Penyata Disediakan PDO dengan Betul?

DDD
Lepaskan: 2024-12-18 13:50:16
asal
922 orang telah melayarinya

How to Properly Use Wildcards with PDO Prepared Statements?

Penggunaan Wildcard dalam Penyata Disediakan PDO

Melaksanakan pertanyaan SQL selalunya melibatkan penapisan data berdasarkan kriteria tertentu. Kenyataan yang disediakan ialah cara selamat untuk mencapainya dengan menghalang kelemahan suntikan SQL. Walau bagaimanapun, menggunakan kad bebas dalam pernyataan yang disediakan boleh menimbulkan cabaran.

Cabaran

Pertimbangkan pertanyaan berikut yang bertujuan untuk mencari pengguna yang namanya mengandungi "sebarang nama":

SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%'
Salin selepas log masuk

Apabila cuba melaksanakan pertanyaan ini dengan pernyataan yang disediakan, pendekatan biasa seperti:

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name");
$stmt->bindParam(':name', "%" . $name . "%");
Salin selepas log masuk

dan

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE '%:name%'");
$stmt->bindParam(':name', $name);
Salin selepas log masuk

mungkin gagal berfungsi. Ini kerana penggunaan kad bebas dalam pernyataan SQL LIKE memerlukan pengendalian khas dalam pernyataan yang disediakan.

Penyelesaian

Untuk menggunakan kad bebas dengan pernyataan yang disediakan dengan betul, seseorang boleh menggunakan bindValue () kaedah bukannya bindParam(). Berikut ialah contoh:

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name");
$stmt->bindValue(':name', '%' . $name . '%');
Salin selepas log masuk

Sebagai alternatif, bindParam() boleh digunakan, tetapi dengan sintaks yang diubah suai sedikit:

$name = "%$name%";
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` like :name");
$stmt->bindParam(':name', $name);
Salin selepas log masuk

Kedua-dua pendekatan memastikan bahawa aksara kad bebas dilepaskan dan dikendalikan dengan betul oleh pangkalan data. Dengan menggunakan bindValue() atau bindParam() dengan cara ini, seseorang boleh mencari data dengan berkesan menggunakan kad bebas dalam pernyataan yang disediakan, memastikan keselamatan dan kefungsian.

Atas ialah kandungan terperinci Bagaimana Menggunakan Kad Liar dengan Penyata Disediakan PDO dengan Betul?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan