$sql = "SELECT * FROM table";
$rows = $db->prepare($sql);
$rows->execute();
foreach ($rows as $row) {
echo($row);
}
echo("<br/>");
foreach ($rows as $row) {
echo($row);
}
如果运行此命令,我将获得arrayarrayarray(...)的第一行,但第二行为空。有什么办法可以运行两次?
编辑:我在这篇文章中有一个错字,原来的问题仍然存在
答案 0 :(得分:1)
strcpy(lo, message+20);
...
strcpy(message, lo);
是一个准备好的语句对象。该对象实现了$rows
,因此您可以使用Traversable
来获取结果,而不必直接调用fetch方法。但是,一旦获取了结果,便无法再次获取它们。您将需要再次执行查询,或者在第一次迭代过程中将结果存储在数组中,然后第二次使用存储的结果,如下所示:
foreach
此外,我不确定$sql = "SELECT * FROM table";
$rows = $db->prepare($sql);
$rows->execute();
foreach ($rows as $row) {
$stored[] = $row; // save the rows in an array
echo($row);
}
echo("<br/>");
foreach ($stored as $row) { // iterate the saved array instead of the statement
echo($row);
}
在这里的工作方式,因为我会假设echo($row)
是一个数组,但这不重要。
答案 1 :(得分:0)
foreach ($row as $row) {
echo($row);
}
我觉得这是一个打字问题,应该是:
foreach ($rows as $row) {
echo($row);
}
就像您在那上面的循环一样。