2015-08-12 6 views
5

Zunächst einmal bin ich neu bei PDO. Ich arbeite an einem kleinen Projekt, um mich selbst zu verbessern.PHP - PDO - Wie man mehrere Zeilen mit nur einer Abfrage holt?

ich so einen Code bin mit einreihig aus meiner Datenbank holen:

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

und Echo kein Ergebnis dieser Zeile wie folgt aus:

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

Ich muss Holen Sie mehrere Zeilen aus meiner Datenbank mit nur einer Abfrage. Ich möchte nicht immer wieder für jede Zeile abfragen, die ich brauche.

Das erste, was in meinem Kopf kam versuchte dies:

$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); 

Aber es hat nicht funktioniert wie erwartet. Ich habe einige Stunden lang Codingforen recherchiert, aber in allen Antworten ging es darum, die fetchAll-Methode zu verwenden und dann Ergebnisse mit der foreach-Schleife auszugeben. Ich möchte den Code nicht belasten, indem ich ganze Datenbanktabelle lade. Ich möchte nur bestimmte Zeilen aus meiner Datenbank mit nur einer Abfrage laden.

Also meine Frage ist:

Wie kann ich mehr und spezifische Zeilen aus meiner Datenbank ohne Verwendung fetchAll Methode und mit nur einer Abfrage holen?

Vielen Dank für Ihre Antworten und die Zeit im Voraus.

Sorry, wenn die Frage vor gefragt wurde.

+0

Geben Sie für SQL-Operator ** OR **. – Michas

+0

FetchAll stellt keine Anfragen an Ihre Datenbank. Es funktioniert nach dem Ergebnis Ihrer Anfrage. Wenn Ihre Abfrage ein Ergebnis zurückgibt, erhalten Sie mit fetchall ein Ergebnis. Wenn es 2 zurückgibt, dann wird es abgerufen. –

+0

@DanielNielson Danke für die Erklärung. :) – OnrS90

Antwort

6

Sie ändern müssen Abfrage

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

und fetchAll() Methode verwenden, die alle Datensätze statt einer zurückgibt.

Wenn Sie nicht fetchAll(); verwenden wollen, dann müssen Sie verwenden() in Schleife holen und Sie müssen noch Abfrage ändern.

while ($user = $result->fetch(PDO::FETCH_ASSOC)) { 
    print_r($user); 
} 

Hinweis: Sie verwenden vorbereitete Anweisungen ohne Parameter.

+0

Vielen Dank für Ihre Antwort. Genau das habe ich gesucht! Können Sie auch ein einfaches Beispiel für vorbereitete Anweisungen mit Parametern eingeben? – OnrS90

+1

http://stackoverflow.com/questions/14767530/php-using-pdo-with-in-clause-array hier ist gutes Beispiel mit wieder – Robert

+0

Dank in Klausel Prepared Statements! Ich werde das überprüfen.:) – OnrS90

4

Sie es wie dies

$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'; 
} 

es gibt eine Menge von Möglichkeiten, dies zu tun, aber es ist nur die Grundlagen vorbereiten verwenden sollten -> Ausführen -> Abrufdaten

+0

Vielen Dank! Ich werde deine Antwort verbessern, wenn ich 15 Ruf habe. :) – OnrS90