假设我需要使用从 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)
当您循环该行时,您会清空结果集。如果要循环多次,可以使用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))改为。
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |