为什么我不能循环 $q->fetch() 两次?

Mvr*_*vrk 3 php mysql pdo

假设我需要使用从 PDO 准备好的语句中得到的结果循环两次。

第一个循环工作正常,下一个循环不起作用

的值为var_dump(q->fetch())空数组。有任何想法吗?

<?php
$q = $dbconnection->prepare("SELECT * from users WHERE role=?");
$q->execute(array('$id')); //Boolean true or false
    

// first loop                           
while ($row = $q->fetch(PDO::FETCH_ASSOC)) {
    echo "<br/>" .  $row['user_id'] . "--". $row['fname']. "</br>";
}

// second loop  this loop will NOT echo any thing ?!
while ($row = $q->fetch(PDO::FETCH_ASSOC)) {
    echo "<br/>" .  $row['user_id'] . "--". $row['fname']. "</br>";
}
Run Code Online (Sandbox Code Playgroud)

Qir*_*rel 6

当您循环该行时,您会清空结果集。如果要循环多次,可以使用fetchAll(),将其存储在变量中,然后在需要使用foreach循环的地方循环。

$q = $dbconnection->prepare("SELECT * from users WHERE role=?");
$q->execute(array($id)); //Boolean true or false

$res = $q->fetchAll();

foreach ($res as $row) {
    echo "<br/>" .  $row['user_id'] . "--". $row['fname']. "</br>";
}

foreach ($res as $row) {
    echo "<br/>" .  $row['user_id'] . "--". $row['fname']. "</br>";
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以再次执行查询,但如果这样做,则会对数据库进行双重查询。所以你对相同的数据查询两次,效率不高。

你也有execute(array('$id')),这将是确切的字符串$id,而不是变量表示。请参阅有关字符串的 PHP 手册。所以应该execute(array($id))改为。