Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.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 While循环中的数组类似于sql fetch\u数组_Php_Sql Server - Fatal编程技术网

Php While循环中的数组类似于sql fetch\u数组

Php While循环中的数组类似于sql fetch\u数组,php,sql-server,Php,Sql Server,我们在一个项目中使用php+sqlserver和存储过程。我们的客户希望在应用程序和数据库服务器之间放置另一台服务器(比如X服务器)。 我们将向X发送请求,它将连接到DB,并将数据返回给应用程序。 现在我们使用2个函数。db_请求(它有sqlsrv_请求)和db_fetch(它有sqlsvr_fetch_数组)。 例如,当我们选择一些城市时,我们调用select_user_by_city过程 $req = db_request("select_user_by_city",array("city_

我们在一个项目中使用php+sqlserver和存储过程。我们的客户希望在应用程序和数据库服务器之间放置另一台服务器(比如X服务器)。 我们将向X发送请求,它将连接到DB,并将数据返回给应用程序。 现在我们使用2个函数。db_请求(它有sqlsrv_请求)和db_fetch(它有sqlsvr_fetch_数组)。 例如,当我们选择一些城市时,我们调用select_user_by_city过程

$req = db_request("select_user_by_city",array("city_id"=>1));
while($result=db_fetch($req)){blablabla}
我的问题就从这一点开始。我更改了db_请求函数的内部,并在其中添加了一些curl和json代码。它将请求发送到X服务器。X服务器调用sqlsrv_请求并选择数据并再次以json形式返回数据。在应用服务器的db_fetch函数中将json转换为数组。但当它进入while循环时,它将进入无限循环。因为返回的数据不再是资源,它是一个数组。

在foreach的整个过程中,是否有任何方法可以让这件事不做任何更改而工作?

这里的问题是,每次while循环完成一次,您都在循环db\u fetch。这很可能意味着db_fetch永远不会返回false,而是始终返回一个数组


要么更改db_fetch以在数组不再具有进一步信息时返回数组(您可能必须保存一些状态,以便db_fetch知道何时完成),要么是,将它们更改为foreach循环。

好的,我这样做了,在代码中将所有db_fetch更改为next()函数。它的作品很棒

while($result=next($req)) {blablabla

下面是我所做的:有一个php扩展名为
runkit
。使用此扩展可以重命名函数。因此,我将
next()
函数重命名为
db\u fetch
。当调用
db\u fetch
时,实际上是调用php的
next
函数。但这还不够,因为当您将此函数放入while循环时,正如在
next
函数中提到的,它总是返回next值。所以我只是在所有数组的开头添加了一个空元素,一切都很好!