2013-08-30 16 views
29

Mysqli ile LIKE ile nasıl bir sorgu yapabilirim ve tüm sonuçları alabilir miyim?php mysqli hazırlanan ifade LIKE

Bu benim kod ama dosn't:

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 
$stmt->bind_result($id,$username); 
$stmt->fetch(); 

işe görünmüyor Bu kodu. Ben çok araştırdım. Ayrıca 1'den fazla satır döndürebilir. Peki, 1'den fazla satır döndürse bile tüm sonuçları nasıl alabilirim? Umarım

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 

$result = $stmt->get_result(); 
while ($row = $result->fetch_array(MYSQLI_NUM)) { 
    foreach ($row as $r) { 
    print "$r "; 
    } 
    print "\n"; 
} 

ben manuel here ve here doğrudan cevabı var farkında, nerede olduğu: Burada

+1

Lütfen "çalışmıyor" tanımını yapın - PHP hatası? MySQL Hatası? Hata yok ama 0 sonuç mu? –

+0

Tüm sonuçlardan geçmek istiyorum. Bunu nasıl yapabilirim? Söylediğim zaman çalışmıyor. Hiçbir şey döndürmez ... – user2493164

+0

Bu kodda dönüş operatörü yoktur. ** Herhangi birşeyi nasıl iade etmesi gerekiyor? ** –

cevap

48

düzgün sonucu

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 
$stmt->bind_result($id,$username); 

while ($stmt->fetch()) { 
    echo "Id: {$id}, Username: {$username}"; 
} 

getirme ya da nasıl yapabilirsiniz İlk önce sen gitmeliydin. Eğer $param değerini düzenlemek gerekmez ama biraz daha uzun sorgular için yapmak anlamına gelir

$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') "); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 

: Ayrıca böylece MySQL CONCAT fonksiyonunu kullanabilirsiniz yukarıda verilen cevap alternatif olarak

+2

OP'yi korumak için, manuel sayfaların hiçbiri LIKE karşılaştırması "işlevini" belirtiyor –

21

.

+0

Merhaba sql enjeksiyonundan güvenli bir şekilde emin misiniz? Ben soruyorum çünkü tırnakları var. Teşekkürler –

+0

@mikevorisis Evet, bu sorgu hala parametreli olduğu için güvenli (* kullanarak '? * *). alıntılar MySQL üç dizeleri CONCATenating çünkü. – Martin

+0

ok Teşekkürler @Martin –