Inilah usaha saya:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');
$query->execute(array('value'));
while ($results = $query->fetch())
{
echo $results['column'];
}
Menemukannya tepat setelah saya memposting:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('value%'));
while ($results = $query->fetch())
{
echo $results['column'];
}
like
digunakan? bagaimana cara mengeksekusi array secara berurutan?Bagi mereka yang menggunakan parameter bernama, berikut adalah cara untuk menggunakan
LIKE
dengan%
pencocokan parsial untuk database MySQL :di mana parameter bernama
:dangerousstring
.Dengan kata lain, gunakan
%
tanda yang tidak dapat di- escape secara eksplisit dalam kueri Anda sendiri yang dipisahkan dan yang pasti bukan input pengguna.Edit: Sintaks penggabungan untuk database Oracle menggunakan operator penggabungan:,
||
jadi itu hanya akan menjadi:Namun ada peringatan seperti yang disebutkan @bobince di sini bahwa:
Jadi, itu hal lain yang harus diperhatikan saat menggabungkan suka dan parameterisasi.
sumber
LIKE CONCAT('%', :something, '%')
. Referensi: stackoverflow.com/a/661207/201648SELECT * FROM calculation WHERE ( email LIKE '%' || luza || '%' OR siteLocation LIKE '%'|| luza ||'%' OR company LIKE '%' ||luza ||'%' )
ini akan memberi saya kesalahan.and it means named placeholders can be used
. Bagaimana ini bahkan menjadi masalah dengan placeholder bernama ketika Anda menggabungkan dalam PHP? Jelas penggabungan dalam PHP mendukung nama dan posisi dan lebih portabel karena Anda dapat menggunakan kueri yang sama untuk database apa pun. Saya tidak benar-benar mengerti mengapa begitu banyak orang berpikir ada apa perbedaan antara nama dan posisi placeholder.sumber
bindValue
melindungi dari serangan injeksi? Jawaban yang diterima pada dasarnya meniadakan nilai menggunakan?
placeholder dengan menggabungkan string pencarian menjadi%
like in ye days of olde.Anda juga bisa mencoba yang ini. Saya menghadapi masalah yang sama tetapi mendapat hasil setelah penelitian.
sumber
Ini bekerja:
sumber
Saya mendapatkan ini dari delusi php
Dan itu berhasil untuk saya, sangat sederhana. Seperti yang dia katakan, Anda harus "menyiapkan literal lengkap kami terlebih dahulu" sebelum mengirimkannya ke kueri
sumber
PDO lolos "%" (Dapat menyebabkan injeksi sql) : Penggunaan kode sebelumnya akan memberikan hasil yang diinginkan saat ingin mencocokkan sebagian string TETAPI jika pengunjung mengetik karakter "%", Anda masih akan mendapatkan hasil meskipun tidak ' t memiliki apa pun yang disimpan di basis data (dapat menyebabkan suntikan sql)
Saya telah mencoba banyak variasi, semuanya dengan hasil yang sama PDO keluar dari "%" yang mengarah ke hasil pencarian yang tidak diinginkan / tidak bersemangat.
Saya pikir itu layak untuk dibagikan jika ada yang menemukan kata di sekitarnya, tolong bagikan
sumber