Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过两种不同方法在结果集中循环铁路超高_Php - Fatal编程技术网

Php 通过两种不同方法在结果集中循环铁路超高

Php 通过两种不同方法在结果集中循环铁路超高,php,Php,我遇到了一个pickle,使用while循环迭代结果集 我执行一个查询,并将其传递到一个类中,将其存储为一个私有变量 然后我使用两种不同的方法在结果集上执行while循环 第一种方法有效,第二种方法无效 下面是一些代码来展示示例 <?php class DataFlow { private $resultSet; function __construct($results) { $this->resultSet = $results; }

我遇到了一个pickle,使用while循环迭代结果集

我执行一个查询,并将其传递到一个类中,将其存储为一个私有变量

然后我使用两种不同的方法在结果集上执行while循环

第一种方法有效,第二种方法无效

下面是一些代码来展示示例

<?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,对,似乎不是一种将其重置为起始位置的方法。谢谢你指出这一点。啊,对了,似乎不是一个重新开始的方法。谢谢你指出这一点。