2016-05-25 25 views
0

Ich habe versucht, diese Abfrage zu loopen, aber alles, was ich bekomme, ist der erste Wert.Wie Schleife die Abfrage in diesem Fall?

Wenn ich den gleichen Befehl in der Workbench bekomme, bekomme ich alle Werte. Was mache ich hier falsch? Jede Antwort wird sehr geschätzt!

global $db; 
$stmt12 = $db->query('SELECT `Value` FROM overriddenpropertyvalues WHERE ParentGUID LIKE "' . $itemguid . '";'); 
$propertyvaluerow = $stmt12->fetch(); 
while ($propertyvaluerow != null) { 
+0

Sie sind Code gebrochen ist. Bitte fügen Sie den Rest hinzu und fügen Sie auch alle Fehler hinzu, die Sie bekommen – dimlucas

+0

es würde nicht viel nutzen, da Sie es nicht ohne die Datenbank sowieso ausführen können. Ich habe diese Abfrage innerhalb einer öffentlichen statischen Funktion. Das Problem ist, dass dieser Code kein Array von Werten zurückgibt und ich mich gefragt habe, ob irgendjemand etwas erkennen kann. – Earl

+0

Verwenden Sie 'fetchAll()' anstelle von 'fetch()' => '$ propertyvaluerow = $ stmt12-> fetchAll();' –

Antwort

0

Sie holen nur einen Wert mit ->fetch(). Deshalb erhalten Sie nur einen Wert.

Beispiel von here:

$query = $db->prepare('SELECT `Value` FROM `overriddenpropertyvalues` WHERE ParentGUID LIKE :like'); 

$query->execute([':like' => $itemguid]); 

$stmt->bind_result($value); 

while ($query->fetch()) { 
    echo $value."<br/>" 
} 
0

Es könnte möglicherweise eine Lücke in Ihrem Programm, je nachdem, was die $ stmt12-> fetch() tut. Wenn es ein Array von Daten abruft, verhält sich Ihre while-Schleife möglicherweise nicht wie erwartet. Nachfolgend finden Sie eine kommentierte Alternative zu dem, was Sie ausprobieren wollen könnte:

<?php 
     global $db; 
     $stmt12   = $db->query('SELECT `Value` FROM overriddenpropertyvalues WHERE ParentGUID LIKE "' . $itemguid . '";'); 
     // ASSUMES YOU ARE USING PDO SO WE FETCH ALL THE DATA 
     $propertyvaluerow = $stmt12->fetchAll(); 

     // THERE MIGHT BE A LOOPHOLE IN YOUR PROGRAM DEPENDING ON WHAT $stmt12->fetch() IS AND DOES 
     // ASSUMING IT FETCHES AN ARRAY OF NESTED OBJECTS OR SCALAR VALUES, THE WHILE LOOP WOULD NOT BEHAVE AS EXPECTED. 
     // THAT MEANS IF IT IS AN ARRAY YOU COULD USE A DIFFERENT CONSTRUCT LIKE THE ONE BELOW YOUR WHILE CONSTRUCT: 
     /* while ($propertyvaluerow != null) { */ 

     // CREATE A $count VARIABLE TO HOLD THE INCREMENTAL COUNT THROUGH THE ITERATION: 
     $count = count($propertyvaluerow); 

     while($count > 0){ 
      // DO YOUR WORK HERE 

      //DECREMENT THE VALUE OF COUNT OTHERWISE YOU MAY HAVE AN INFINITE LOOP TO DEAL WITH. 
      $count--; 
     } 

    ?> 

Es gibt noch eine weitere Alternative:

<?php    
     // OR EVEN A MUCH MORE EASIER WAY IS TO USE THE FOREACH LOOP, WHICH ACHIEVES THE SAME THING AS THE WHILE LOOP: 
     foreach($propertyvaluerow as $iKey=>$objData){ 
      // SIMPLY USE THE $objData IN WITHING THE LOOP 
      // THE $objData IS THE VALUE OF THE CURRENT OBJECT IN THE $propertyvaluerow IN THE ITERATION 
     } 
0

Der beste Weg:

global $db; 
$stmt = $db->prepare('SELECT `Value` FROM OverriddenPropertyValues WHERE ParentGUID=?'); 
$stmt->execute([$itemguid]); 
$rows = $stmt->fetchAll(); 

foreach($rows as $row) { 
    // $row->Value or $row['Value'] 
} 
Verwandte Themen