PHP ile MySQL'den Kelime Araması Yapmak

Merhaba. MySQL veritabanından PHP ile veri çekmeye çalışıyorum ama bir sorunla karşılaştım. Benim amacım $_POST ile gelen aramanın veritabanındaki veri ile birebir eşleşmesi. Yani arama kutucuğuna merhaba yazınca eğer veritabanında merhaba değilde “merha” diye bir veri varsa bunu ekrana yazmaması. 2 gündür üzerinde çalışıyorum ama bir türlü beceremedim. Ne yapmam gerekiyor bunun için? Yazdığım arama kodu bu ama tek harf bile yazsam o harfle uyuşan verileri çekiyor bu.

$cikti = $_POST['turkce'];
$sql = "SELECT * FROM jbirincigrup WHERE b_turkce LIKE '%$cikti%'";
$sorgu = $conn -> query($sql);
					
while($yazdir = $sorgu -> fetch_array()){
        $cevir_sozluk = $yazdir['deneme'];
}

Merhaba.

LIKE yerine = işlecini kullanabilirsiniz. LIKE işleci benzer olan öğelerle de eşleşir ancak = işleci tam bir eşleşme yapar. Ancak = işlecinin harf büyük-küçüklüğüne dikkat etmediğini unutmayın. Bu işleçlerle ilgili Stack Overflow’daki bir tartışma için şuraya bakabilirsiniz: https://stackoverflow.com/questions/515039/use-or-like-to-compare-strings-in-sql

İyi çalışmalar.

Cevabınız için teşekkürler. = işlecini kullanınca hiç çıktı alamıyorum. Bunun sebebi nedir? Kodların tamamı şöyle:

<?php
	$cikti = $_POST['turkce'];
	$sql = "SELECT * FROM jbirincigrup WHERE b_turkce = '%$cikti%'";
	$sorgu = $conn -> query($sql);
					
	while($yazdir = $sorgu -> fetch_array()){
		$cevir_sozluk = $yazdir['deneme'];
}
echo "
	<form action='cevir.php' method = 'post'>
		<table>
			<tr>
				<td><textarea name='turkce' maxlength='50' style='resize: none; padding-right:35px; padding-bottom: 35px;'>$cikti</textarea></td>
				<td><input type='submit' value=' Uygula ' style='padding: 2px;'></td>
				<td><div style='border: solid gray 1px; padding-right:200px; padding-bottom: 85px;'>$cevir_sozluk</div></td>
			</tr>
		</table>
	</form>";?>

Bu arada üstteki kodlar POST edilen sayfanın kodları.

= işleciyle birlikte % karakterlerini kullanmayın. Bu karakterler LIKE işlecine özgüdür.

Çok teşekkürler. Sayenizde çözüldü. Böyle ufak hatalar yapınca kendimi salak gibi hissediyorum. :sweat_smile:

Estağfirullah. Bilmemek değil, öğrenmemek ayıptır. Ayrıca SQL’in sözdizimini basit de olsa öğrenirseniz bu tür hatalardan gelecekte daha kolay kaçınabilirsiniz. :slight_smile:

1 Beğeni

Haklısınız. Öğrenirken kendimce projeler geliştirmeye çalışıyorum. Takıldığım son bir nokta var şimdi. Veritabanında olmayan bir kelime arattığımda veritabanı hatası alıyorum. Bunun yerine veri bulunamadı gibi bir uyarı vermem mümkün mü? Çıkan sonuçla yazılan yazı eşleşmiyorsa “veri bulunamadı” gibi bir kombinasyon denedim ama sonuç alamadım.

Veritabanından veriyi getiren metod, veri bulunamadığında bir hata fırlatıyor olmalı. Bu hatayı try-catch blokları ile dinleyerek hata durumunda gerekenleri yapabilirsiniz. Bu sözdizimi ile ilgili belgelendirme için şuraya bakabilirsiniz: http://php.net/manual/tr/language.exceptions.php

1 Beğeni

Sorunu farklı bir while döngüsü ile veritabanındaki bilgileri çekerek ve kullanıcının girdiği metni, bilgileri çektiğim değişkenle karşılaştırarak çözüme kavuşturdum. Şu an çok mutluyum. Tekrar tekrar teşekkürler yardımınız için.

1 Beğeni

Nispeten ufak veri tabanalrida uygulayabilirsiniz ancak veri sayisi binleri astigi zaman fazladan islem gucu tuketecek bir hareket olur.Uygulamanizin yavas calismasina sebep olacaktir.

Yaklaşık 2 bin 500 civarı bir veri olacak içinde. Veri uzunlukları da en fazla 30 karakterden oluşacak. Bu sıkıntı çıkartır mı?

Cikarir diye tahmin ediyorum.Fazladan is yuku performasi dusurur.