Abfrage mehrfach verwenden

luchs3

Erfahrenes Mitglied
Hi, ich habe eine SQL- Abfrage, deren Ergebnis ich über ein FOR Schleife n-mal verwerten möchte.

Es steht zwar überall, dass ich mit prepare eine Abfrage mehrfach verwenden kann, aber wie ich das machen soll steht nirgends.

Danke im vorraus
Niko
 
Hi,

PHP:
$sql = "SELECT * FROM foo WHERE bar = :i";
try
{
  $stmt = $dbh->prepare($sql);
  for($i = 1; $i < 10; $i++)
  {
    $stmt->bindParam( ':i', $i );
    $result = $stmt->execute();
    echo "<pre>";
    print_r( $result );
    echo "</pre>";
  }
}
catch(Exception $ex)
{
  echo $ex->getMessage();
  echo "<pre>";
  echo $ex->getTraceAsString();
  echo "</pre>";
}

Da du nicht angegeben hast, welchen Layer du verwendest, bin ich davon ausgegangen, das dein Layer Exceptions wirft.

Übrigens steht das im Manual von PHP im Bereich PDO.
 
Ja, da ich nicht weiß, wie oft oder unter welchen Bedingungen die Abfrage gestartet werden soll, habe ich das Beispiel so aufgebaut. Natürlich kannst du auch eine while-Schleife implementieren, wenn dir das lieber ist. Du hast nicht beschrieben, wie du an die Daten kommst, über die du iterieren willst.
 
Verstehe, also ich brauche nur eine Abfrage.
Diese Daten muss ich mehrfach auswerten.
Am liebsten wäre mir einer while Schleife wie unten beschrieben.

Das funktioniert aber nicht
PHP:
$result=$db_pdo->prepare("SELECT...");
$result->execute();

for ($n=0; $n<3; $n++)
{
    while ($dbresult = $result->fetchObject())
    {
        bla
    }
}
 
Wenn du es fest auf z.B. 3 begrenzen willst, kannst du das SQL-Clause LIMIT verwenden und dann anschließend ohne for-Schleife arbeiten:

PHP:
$stmt=$db_pdo->prepare("SELECT... LIMIT 3");
$stmt->execute();


while ($dbresult = $stmt->fetchObject())
{
  print_r( $dbresult );
}
 
Ich denke mehr, er möchte die selben Daten, einer Anfrage, mehrfach auswerten.

Ich schlage vor, die Daten in ein Array zu packen und dieses Array mehrfach zu durchlaufen.
 
Genau das meine ich, wäre halt einfacher, wenn ich das direkt mit einer while Schleife machen könnte.
So muss ich ja das zweidimensionale Array mit zwei foreach Schleifen durchlaufen lassen, oder?
 
Soweit ich weiß, gibt es eine Funktion, die sofort alle Daten der Abfrage in ein Eindimensionales Array zu speichern. Hab aber leider vergessen wie es heißt. Könnte was in richtung fetch_array() sein. Vielleicht kann dir da jemand anderes weiter helfen.

In jedem Fall brauchst du einmal das auslesen der Daten und dann eine Schleife, welche das Array durchläuft
 
Zurück