2016-05-25 8 views
0

私はこのクエリをループしようとしていますが、私が得るのは最初の値です。この場合、クエリをループする方法はありますか?

ワークベンチで同じコマンドを実行すると、すべての値が取得されます。 ここで何が間違っていますか?どんな答えでも大歓迎です!

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

あなたがコードしているが壊れています。それ以外の部分を追加し、エラーが発生した場合は – dimlucas

+0

を入力してください。データベースを使用せずに実行できないため、あまり役に立ちません。私は公共の静的関数の中にこのクエリを持っています。問題は、このコードが値の配列を返さないことと、誰かが何かを見つけられるかどうか疑問に思っていたことです。 – Earl

+0

'fetch()'の代わりに 'fetchAll()'を使う=> '$ propertyvaluerow = $ stmt12-> fetchAll();' –

答えて

0

->fetch()で1つの値だけをフェッチしています。だからこそ、あなたは一つの価値しか受け取りません。 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

おそらく$ stmt12->は(フェッチものに応じて、プログラム内の抜け穴があるかもしれません)ありません。データの配列をフェッチする場合、whileループは期待どおりに動作しない可能性があります。以下は、あなたが試してみたいかもしれないものにコメント代替です:

<?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--; 
     } 

    ?> 

にはまだ別の代替されています

<?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

ベストな方法:

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'] 
} 
関連する問題