Php Dersleri

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ı. Mysqlde Arama İşlemi (Like) 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.

Bir önceki yazım olan Php PDO ile Gelişmiş Sayfalama Yapımı başlıklı makalemi de okumanızı öneririm.

İlgilizi Çekecek Konular

Php’de For ve While İle Verileri Listeleme İşlemi

ibrahim Çevrük

Css Kodlarında Php Kodu Kullanmak ve Php ile Css Kodlarını Sıkıştırma

ibrahim Çevrük

Değişken Tanımlama ve Ekrana Yazdırma

ibrahim Çevrük

1 Yorum

murathan 31 Ağustos 2018 at 22:19

Makalen pek işime yaradı kardeşim sağolasın.

Cevap

Yorum Giriniz