Php 通过两种不同方法在结果集中循环铁路超高
我遇到了一个pickle,使用while循环迭代结果集 我执行一个查询,并将其传递到一个类中,将其存储为一个私有变量 然后我使用两种不同的方法在结果集上执行while循环 第一种方法有效,第二种方法无效 下面是一些代码来展示示例Php 通过两种不同方法在结果集中循环铁路超高,php,Php,我遇到了一个pickle,使用while循环迭代结果集 我执行一个查询,并将其传递到一个类中,将其存储为一个私有变量 然后我使用两种不同的方法在结果集上执行while循环 第一种方法有效,第二种方法无效 下面是一些代码来展示示例 <?php class DataFlow { private $resultSet; function __construct($results) { $this->resultSet = $results; }
<?php
class DataFlow {
private $resultSet;
function __construct($results) {
$this->resultSet = $results;
}
function method1() {
while ($rows = CDB::GetAssoc($this->resultSet)) {
// works here
echo $rows;
}
}
function method2() {
while ($rows = CDB::GetAssoc($this->resultSet)) {
// doesn't work here
echo $rows;
}
}
}
$sqlQuery = "....";
$results = CDB::ExecuteQuery($sql);
$dataFlow = new DataFlow($results);
echo $dataflow->method1(); // Works
echo $dataflow->method2(); // Doesn't work.
?>
现在,如果我编辑它以在本地包含查询执行。。它可以工作
<?php
class DataFlow {
private $resultSet;
function __construct($results) {
$this->resultSet = $results;
}
function method1() {
while ($rows = CDB::GetAssoc($this->resultSet)) {
// works here
echo $rows;
}
}
function method2() {
$sqlQuery = "....";
$results = CDB::ExecuteQuery($sql);
while ($rows = CDB::GetAssoc($results)) {
// now works here
echo $rows;
}
}
}
$sqlQuery = "....";
$results = CDB::ExecuteQuery($sql);
$dataFlow = new DataFlow($results);
echo $dataflow->method1(); // Works
echo $dataflow->method2(); // Works
?>
我似乎不明白为什么不能在同一个类中使用两次结果集。有什么想法吗?从数据库查询中读取结果涉及到在结果行中遍历某种光标。根据您的数据库类,如果需要,您可能能够重置此游标以在结果上循环数次。如果没有,则必须再次执行查询。从数据库查询中读取结果涉及到在结果行中遍历某种光标。根据您的数据库类,如果需要,您可能能够重置此游标以在结果上循环数次。如果没有,则必须再次执行查询。据我所知,
$results
是一个资源,因此X行数,fetch_assoc($results)将从资源返回一行,如果没有更多行,则返回NULL
因此,在某个时刻,$row
将计算为false(因为没有更多的行可返回),这将结束while循环
传递给这个函数的资源结果可以被认为是通过引用传递的,因为资源只是指向内存位置的指针
因此,在将指针重置回起始位置之前,不能在同一脚本中循环两次资源结果。据我所知,
$results
是一个资源,因此X行数、fetch\u assoc($results)将从资源返回一行,如果没有更多行,则返回NULL
因此,在某个时刻,$row
将计算为false(因为没有更多的行可返回),这将结束while循环
传递给这个函数的资源结果可以被认为是通过引用传递的,因为资源只是指向内存位置的指针
因此,在将指针重置回起始位置之前,不能在同一脚本中循环两次资源结果。Ah,对,似乎不是一种将其重置为起始位置的方法。谢谢你指出这一点。啊,对了,似乎不是一个重新开始的方法。谢谢你指出这一点。