Bir mysql veritabanı arıyor

4 Cevap php

Şu anda ben Şimdi ben bunun için bir php frontend'i yazıyorum, MySQL db'd var, ve bunun işe yaradığını, bir tablodaki her şeyi listeler müzik bir veritabanı var, ama "beatles" arama varsa bana verir ben sadece 0 satır sonuçlanır "beatles" eğer arama 453 sonuç (doğru) Ancak, nasıl böyle bir şey aramak için bu mümkün yapma hakkında gitmek istiyorsunuz?

heres benim geçerli satır:

$query2 = "SELECT * From `songs` WHERE `Artist` like '".$_REQUEST['q']."'
   OR `Album` like '".$_REQUEST['q']."' OR `Genre` like '".$_REQUEST['q']."'
       OR `Title` like '".$_REQUEST['q']."';";

@Yacoby ile EDIT reformasyon sorgu

 $query2 = "SELECT * "
         . "From `songs` "
         . "WHERE `Artist` like '".$_REQUEST['q']."' "
         .   "OR `Album` like '".$_REQUEST['q']."' "
         .   "OR `Genre` like '".$_REQUEST['q']."' "
         .   "OR `Title` like '".$_REQUEST['q']."';";

4 Cevap

Tırnak içinde, arama terimi önce ve sonra bir % atmak:

WHERE Artist like '%".$_REQUEST['q']."%'

O [şey] Beatles [şey] arayacaktır

Eğer kullanıcı girişi ayrıştırma ve temizlik düşünebilirsiniz. Gibi kelimelerin kurtulun "" ve sadece "The Beatles" gibi sorguda önemli kelimeleri kullanın.

A LIKE sorgu (% ve _) SQL joker karakterleri kullanmanıza olanak sağlar. Eğer düzenli bir 'eşittir' karşılaştırma kullanılarak sanki aksi takdirde tam davranır:

SELECT .... WHERE somefield LIKE 'beatles';
SELECT .... WHERE somefield='beatles';

oysa, aynı hareket

SELECT .... WHERE somefield LIKE 'beatles%';

somefield 'Beatles' ile başlar ve herhangi bir kaydı bulur

SELECT .... WHERE somefield='beatles%';

literal dize 'Beatles%' içeren sadece kayıtları bulmak (ve% joker olarak tedavi altına olmadığını unutmayın) olacaktır.

SQL enjeksiyon karşı korumak gerekir. Ya birisi girerse:

'; DROP DATABASE music; --

ya da benzer bir şey?