我有这个示例查询:
$STH = $DBH->query("SELECT id FROM table");
我想获取第一行,然后循环并显示所有行。所以我使用以下命令来获取第一行:
$STH->setFetchMode(PDO::FETCH_ASSOC);
$first_row = $STH->fetch();
$first_row = $first_row['id'];
我使用 while 循环再次显示所有行:
while ($list = $STH->fetch()) {
$id = $list['id'];
echo $id;
}
现在 while 跳过第一行,我希望它被显示。有没有相当于mysql_data_seek
将指针再次重置到第一行?我知道fetchall
可以用,但是对内存不好而且浪费。我也可以运行查询并将其限制为 1,但不建议这样做,因为我有一个连接多个表的查询,速度会非常慢。还有其他解决办法吗?
Thanks
我认为您可以使用光标方向内容来选择结果...示例代码即将到来...我还没有尝试过这个,所以您可能需要玩一下。这也是基于这样的假设:PDO::FETCH_ORI_FIRST
其作用类似于 data_seek 并将光标保留在第一个位置,而不是将其返回到之前的位置。
$stmt = $pdo->prepare('SELECT id FROM table', array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute();
$first = $pdo->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_FIRST);
$first_row = $first['id'];
// other stuff
// first iteration we rewind to the first record;
$cursor = PDO::FETCH_ORI_FIRST;
while (false !== ($row = $stmt->fetch(PDO::FETCH_ASSOC, $cursor))) {
$id = $row['id'];
// successive iterations we hit the "next" record
$cursor = PDO::FETCH_ORI_NEXT;
echo $id;
}
我不认为你可以倒带一个语句...假设这些块被一堆中间逻辑 id 分开,只需在循环中执行即可。
$STH->setFetchMode(PDO::FETCH_COLUMN); // no need to pull an array
$count = 0;
while ($id = $STH->fetch()) {
if($count === 0) {
$first_row = $id;
}
echo $id;
$count++;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)