2015-08-12 14 views
5

Her şeyden önce PDO'ya yeniyim. Kendimi geliştirmek için küçük bir proje üzerinde çalışıyorum.PHP - PDO - Sadece bir sorgu ile birden çok satır nasıl getirilir?

benim veritabanından tek bir satırı çeker için böyle bir kod kullanıyorum

:

$sql = "SELECT * FROM users WHERE ID = 1"; 
    $sql_prepare = $db -> prepare($sql); 
    $result = $db -> query($sql); 
    $user = $result -> fetch(PDO::FETCH_ASSOC); 

ve bunun gibi bu satırın herhangi bir sonuç echo:

echo $user['ID']; 
    echo $user['Name']; 

ben gerek veritabanından yalnızca bir sorgu kullanarak birden çok satır getir. İhtiyacım olan her satır için tekrar tekrar sorgulamak istemiyorum. Aklımda geldi

ilk şey bu çalışıyordum:

$sql = "SELECT * FROM users WHERE ID = 1 AND ID = 4 AND ID = 17"; 
    $sql_prepare = $db -> prepare($sql); 
    $result = $db -> query($sql); 
    $user = $result -> fetch(PDO::FETCH_ASSOC); 

Ama beklendiği gibi işe yaramadı. Birkaç saat boyunca kodlama forumları araştırdım, ancak tüm cevaplar fetchAll yöntemini kullanmak ve daha sonra foreach döngüsünü kullanarak sonuç çıkarmaktı. Tüm veritabanı tablosunu yükleyerek kodu zorlamak istemiyorum. Sadece bir sorgu kullanarak veritabanımdan belirli satırları yüklemek istiyorum.

Yani benim soru:

Ben fetchAll yöntemi ve tek bir sorgu ile kullanmadan benim veritabanından çoklu ve spesifik satırlar getirmek nasıl

?

Yanıtlarınız ve zamanınız için şimdiden teşekkür ederiz.

Soru daha önce sorulmuşsa özür dilerim.

+0

bak ** VEYA **. – Michas

+0

FetchAll veritabanınıza istekte bulunmaz. Sorgunuzun sonucu üzerinde çalışır. Sorgunuz bir sonuç döndürürse, fetchall size bir sonuç verecektir. 2 döndürürse o zaman fetchall olacaktır. –

+0

@DanielNielson Açıkladığınız için teşekkürler. :) – OnrS90

cevap

6

Sen

SELECT * FROM users WHERE ID IN(1,4,17); 

için sorguyu değiştirebilir ve bir yerine tüm kayıtları döndürür fetchAll() yöntemi kullanmak gerekir.

fetchAll(); kullanmak istemiyorsanız, o zaman fetch() öğesini döngüde kullanmanız gerekir ve yine de sorguyu değiştirmeniz gerekir.

Dikkat: Parametresiz hazırlanmış ifadeler kullanırsınız.

+0

olarak da değiştirebilirsiniz. Yanıtınız için teşekkür ederiz. Tam olarak aradığım şey bu! Parametrelerle hazırlanmış ifadelere basit bir örnek de yazabilir misiniz? – OnrS90

+1

http://stackoverflow.com/questions/14767530/php-using-pdo-with-in-clause-array burada, – Robert

+0

numaralı cümlede açıklanan ifadeleri kullanmanın iyi bir örneğidir. Tekrar teşekkürler! Bunu kontrol edeceğim.:) – OnrS90

4

bu

$sth = $dbh->prepare('SELECT * FROM users WHERE ID IN(?,?,?)'); 
    if($sth->execute([1,2,3])) { 
     //1,2,3 is the value to be send 
     if($sth->rowCount() > 0) { 
      while($result = $sth->fetchObject()) { 
       print_r($result); 
      } 
     } else { 
      echo 'there are no result'; 
     } 
    } else { 
     echo 'there error in the query'; 
} 

gibi kullanmalıdır orada bu işi yapmak için yollar bir sürü vardır ama bu sadece temelleri hazırlamak -> yürütmek - SQL operatör için> getirme veri

+0

Çok teşekkürler! 15 itibarım olduğunda cevabınızı vereceğim. :) – OnrS90

İlgili konular