2013-11-25 13 views
6

1,2,3,4,5 gibi bir ids dizim var ve bu listede kimliğin bulunduğu mysql içindeki tüm satırları listelemek istiyorum. Mysql Burada kimlik dizilimi var

Ben en kolay yolu bir diziye dize getirebilir ve sonra ($ dizideki) eşleşecek şekilde olacağını kabul ama bu benim için çalışmıyor - hiç hata vs ama hiçbir satır döndürür:

$string="1,2,3,4,5"; 
$array=array_map('intval', explode(',', $string)); 
$query=mysqli_query($conn, "SELECT name FROM users WHERE id IN ('".$array."')"); 
Ben $ dizinin bir var_dump yaparsanız

alıyorum: Ben

array(5) { 
    [0]=> int(1) 
    [1]=> int(2) 
    [2]=> int(3) 
    [3]=> int(4) 
    [4]=> int(5) 
} 

herhangi bir fikir kadar vidalama am nerede? Bu etkiler

SELECT name FROM users WHERE id IN ('Array'); 

Ya da bir şey için:

+0

Ids dizeleri veya Tamsayılar mı? –

cevap

17
$string="1,2,3,4,5"; 
$array=array_map('intval', explode(',', $string)); 
$array = implode("','",$array); 
$query=mysqli_query($conn, "SELECT name FROM users WHERE id IN ('".$array."')"); 
+0

Teşekkür ederim, bu bir tedavi çalışmıştı – bhttoan

+1

Bhttoan harika çalıştı, ama bu güvenlik açıklarına tabidir ... – qwertynl

+0

Nasıl? Çok fazla gereksiz kod koymaktan kaçınmak için kodun (basit bir sorgunun kendisi de dahil olmak üzere) çok basitleştirilmiş ve ayrıştırılmış bir görünümünü gösterdim ancak dizi içeriğinin dezenfekte edilmesinden ve güvende olmasından dolayı mutluyum. – bhttoan

6

Sorgunuzda çevirir.

gibi yerine bir şey hazırlanmış sorguları kullanarak deneyin: To

$array=array_map('intval', explode(',', $string)); 

$numbers = explode(',', $string); 
$prepare = array_map(function(){ return '?'; }, $numbers); 
$statement = mysqli_prepare($link , "SELECT name FROM users WHERE id IN ('".implode(',', $prepare)."')"); 
if($statement) { 
    $ints = array_map(function(){ return 'i'; }, $numbers); 
    call_user_func_array("mysqli_stmt_bind_param", array_merge(
     array($statement, implode('', $ints)), $numbers 
    )); 
    $results = mysqli_stmt_execute($statement); 
    // do something with results 
    // ... 
} 
1

Değişikliği: Bir dizi değil, bir dize döndürür array_map

$array= implode(',', array_map('intval', explode(',', $string))); 

. WHERE deyiminde kullanmak için diziyi virgülle ayrılmış bir dizeye dönüştürmeniz gerekir.

+0

Sonra sadece orijinal dizgeye geri dönüyor ... Nokta nedir? – qwertynl

+0

İstediğine inanıyorum. – Darius

+0

Bu, seçtiğim yanıtla aynı sonuçlara benziyor, ancak iki satırdan ziyade bir satırda neden downvote olduğundan emin değil misiniz? FYI @Darius Ben bu – bhttoan