PDO ile Site İçi Arama İşlemi | PDO Like

Çok gariptir ki PDO üzerinden gelen en çok soru; "PDO ile Site İçi Arama Nasıl Yapılır?" oldu. PDO kodlaması öncesinde yapmış olduğumuz mysql_* li arama sorgusunda bir değişiklik olmadı. dersinde arama işlemiyle ilgili bütün detaylara değinmiştik. Şimdi de bu işlemin, PDO platformunda nasıl yapıldığını inceleyelim. Ama öncelikle gelen bu sorunun neden olduğuna değinelim.

Sanırım soruların PDO ile yapılacak olan arama işlemiyle ilgili gelmesi, git gide bilinçlenen ve prepare ile sorgularını hazırlamak isteyen kişilerin artmasından dolayı çok sıkça sorulur oldu. Biliyorsunuz ki prepare kullanıldığında execute ile belirlenen değerin karşılığını belirtmemiz gerekiyor. Fakat site içi arama işlemi sırasında hazırladığımız sorgunun WHERE kısmında bir karşılık bulunmuyor. Durum böyle olunca da; nasıl yapabilirim ben bunu gibi sorular akın akın geliyor.

Sorgunun nasıl olduğuna geçmeden önce, execute ve ?(Soru İşareti) ilişkisine bir değinmek istiyorum. Öncelikle yapmış olduğumuz sorularda, ?(Soru İşareti) ile belirttiğimiz yerin bir karşılığının olması şart değil. Yani, WHERE id=? şeklinde bir değer girebileceğimiz gibi WHERE ? şeklinde değer girişi yapabiliriz.

Site içi arama işlemi, kullanıcıdan gelecek olan değerler ile işlem gördüğünden dolayı, prepare kullanmak zorundayız. Prepare, belirli güvenlik açıklarını önlediğinden dolayı tercih edilmektedir. Arama işlemi Veri Tabanı ile direkt olarak ilişkide bulunduğundan dolayı güvenlik konusu göz ardı edilmemelidir.

Arama işlemleri genelde başlık üzerinden gerçekleştirilmektedir. Bunun yanı sıra kısa içerik üzerinden de aramalar yapılmaktadır. Biz bu makale de başlıklar üzerinden 3 farklı şekilde arama gerçekleştireceğiz.

1 - Kullanıcıdan Gelen Değer İle Başlayan Verileri Listeleme

Kullanıcıdan gelecek olan değerin, başlangıç kelimesi olarak tanımlamak için, aramayı belirten değişkenin sonuna %(Yüzde) noktalama işareti yazılır. Böylelikle değişkenden gelen değerden sonrasının listelenmesi beklenir. Örneğin; PDO ile Site İçi Arama İşlemi | PDO Like makalesine ulaşmak için bu sorgu yöntemi kullanılarak PDO kelimesiyle aranması mümkün olacaktır.

$Gelen = $_GET["ara"]; // Kullanıcıdan gelen arama değeri
$Ara = $db->prepare("SELECT * FROM makale WHERE baslik LIKE ? LIMIT 10"); // Arama sorgusu ve limit belirtme
$Ara->execute(array($Gelen.'%')); // "?" ifadesinin karşılığını belirtme | x ile başlayan ifadeyi temsil eder.
$Liste = $Ara->fetchAll(PDO::FETCH_ASSOC); // Veri çekmek için kullanılacak olan değişken
if($Ara->rowCount() != "0"){ // Aranan kelimeye göre veri varsa
foreach($Liste as $Bas){
echo $Bas["baslik"]."<hr>";
}
}else{ // Aranan kelimeye göre veri yoksa
echo "Aranan kelimeye göre veri bulunamadı :( ";
}

Yukarıdaki gibi sorguyu hazırladığımızda, kullanıcıdan gelecek olan veriyle başlayan makale başlıkları listelenecektir. Arama sorgusunda belirtmiş olduğum LIMIT zorunlu değildir. Fakat arama çıktısı olarak belirli sayıda sonuç göstermek isterseniz o zaman LIMIT değerini kullanabilirsiniz.

2 - Kullanıcıdan Gelen Değer İle Biten Verileri Listeleme

Kullanıcıdan gelecek olan değerin, bitiş kelimesi olarak tanımlamak için, aramayı belirten değişkenin başına %(Yüzde) noktalama işareti yazılır. Böylelikle değişkenden gelen değerin öncesinin listelenmesi beklenir. Örneğin; PDO ile Site İçi Arama İşlemi | PDO Like makalesine ulaşmak için bu sorgu yöntemi kullanılarak Like kelimesiyle aranması mümkün olacaktır.

$Gelen = $_GET["ara"]; // Kullanıcıdan gelen arama değeri
$Ara = $db->prepare("SELECT * FROM makale WHERE baslik LIKE ? LIMIT 10"); // Arama sorgusu ve limit belirtme
$Ara->execute(array('%'.$Gelen)); // "?" ifadesinin karşılığını belirtme | x ile biten ifadeyi temsil eder.
$Liste = $Ara->fetchAll(PDO::FETCH_ASSOC); // Veri çekmek için kullanılacak olan değişken
if($Ara->rowCount() != "0"){ // Aranan kelimeye göre veri varsa
foreach($Liste as $Bas){
echo $Bas["baslik"]."<hr>";
}
}else{ // Aranan kelimeye göre veri yoksa
echo "Aranan kelimeye göre veri bulunamadı :( ";
}

Yukarıdaki gibi sorguyu hazırladığımızda, kullanıcıdan gelecek olan veriyle biten makale başlıkları listelenecektir. Şuana kadar pek kullanıldığını görmediğimden dolayı çok sıklıkla kullanılan bir arama türü olduğunu söyleyemem.

3 - Kullanıcıdan Gelen Değerin Herhangi Bir Yerinde Bulunan Verileri Listeleme

Kullanıcıdan gelecek olan değerin, arama yapılan sütundaki verilerin herhangi bir yerinde bulunması durumunda listelenmesini sağlamak için, aramayı belirten değişkenin başına ve sonuna %(Yüzde) noktalama işareti yazılır. Böylelikle değişkenden gelen değere sahip olan bütün verilerin listelenmesi sağlanır. Örneğin; PDO ile Site İçi Arama İşlemi | PDO Like makalesine ulaşmak için bu sorgu yöntemi kullanılarak PDO, Arama, İşlemi, Like, Site kelimelerinden birisinin kullanılması durumunda aranması mümkün olacaktır.

$Gelen = $_GET["ara"]; // Kullanıcıdan gelen arama değeri
$Ara = $db->prepare("SELECT * FROM makale WHERE baslik LIKE ? LIMIT 10"); // Arama sorgusu ve limit belirtme
$Ara->execute(array('%'.$Gelen.'%')); // "?" ifadesinin karşılığını belirtme | içerisinde x ifadesini olan verileri temsil eder.
$Liste = $Ara->fetchAll(PDO::FETCH_ASSOC); // Veri çekmek için kullanılacak olan değişken
if($Ara->rowCount() != "0"){ // Aranan kelimeye göre veri varsa
foreach($Liste as $Bas){
echo $Bas["baslik"]."<hr>";
}
}else{ // Aranan kelimeye göre veri yoksa
echo "Aranan kelimeye göre veri bulunamadı :( ";
}

Yukarıdaki gibi sorguyu hazırladığımızda, kullanıcıdan gelecek olan verinin bulunduğu makale başlıkları listelenecektir.

PDO ile arama işlemi yukarı yer alan örneklerdeki gibi yapılmaktadır. Bir de bunun anahtar tanımlayarak yapılacak olan sorgu türü de mevcuttur. İki sorgu türü de aynı işlemi yaptığından dolayı onunla ilgili diğer örnekleri listelemek istemediğinden dolayı sadece bir sorgu örneği kullanarak ona da değinmiş olalım.

Anahtar Belirterek Arama İşleminin Yapılması

Buradaki anahtar, aranacak olan verinin durumunu belirtmek için kullanılan bir ifade değildir. Execute verisi içerisinde yer alacak olan Array değerinde tanımlanan anahtardır. Bu sorgu türüyle kodlama yapanların da olduğunu düşündüğümden dolayı, anahtarlı sorgu kullanımına da değinmek istedim.

$Ara   = $db->prepare("SELECT * FROM makale WHERE baslik LIKE :ara LIMIT 10"); 
$Ara->execute(array( ':ara' => '%'.$Gelen.'%'));

Yukarıdaki sorguda yer aldığı gibi bir anahtar belirterek sorgularınızı düzenleyebilirsiniz. Kodlama alışkanlığınıza hangisi uyuyorsa istediğinizi kullanmakta özgürsünüz. İki türde de bir farklılık yoktur. Tamamıyla kullanım şekline göre değişen sorgu biçimdir.
- 10.07.2015 / 14:12:45 10

Sosyal Medya Paylaşım Alanı

Bunlarda İlginizi Çekebilir

6:35 Php Dersleri

String İfadeleri Eş Parçalara Bölmek | str_split();

Kategori: Php Dersleri | 04.05.2013
4:52 Css Dersleri

CSS !important ile Önemlilik Değeri Katmak

Kategori: Css Dersleri | 14.07.2013
37:46 Php Dersleri

Php ile Basit Bot Yapımı (Uzaktan Veri Çekimi)

Kategori: Php Dersleri | 03.05.2013
11:36 Javascript
3:46 Css Dersleri

Yorum Listesi (4) # YorumYap

  • Yavuz Selim Şahin (10.07.2015 - 16:09:49)
    Ellerine saglık abi :)
  • Perviz (23.08.2015 - 20:31:54)
    Tessekurler hocam
  • Jiwtoo (28.10.2015 - 13:20:51)
    Hocam İf($Ara->rowCount()) != "0") burda bir tane ) fazlalıgı var faydalı çalışma olmuş başarılar hayırlı çalışmalar.
  • ibrahim Çevrük (28.10.2015 - 15:01:15)
    @Jiwtoo Bildirimin için teşekkürler. Gerekli düzenlemeyi yaptım.

Hadi Sende Yorum Yap!

Yorum Gönderilmiştir. Onaylandıktan Sonra Mesajınız Yayınlanacaktır.