2014-09-04 45 views
1

所以,这是我的问题:我有一个函数,查询SQL并将其拉入资源。在此功能中,我运行:php odbc导致unsetting

if (odbc_num_rows($rs) === 0) { 
     return FALSE; 
    } else { 
     if ($type !== "Issues") { 
      while (odbc_fetch_row($rs)) { 
       $issues['tvi'][] = odbc_result($rs, 'TitleVolumeIssue_c_'); 
      } 
     } 
     return $rs; 
    } 

这正是它应该做的。但是,当我将$ rs传递给下一个解析为html的方法时,看起来好像$ rs未被设置。奇怪的是,我可以调用odbc_num_rows($ rs),它给了我正确的行数,但是转储var显示它是错误的,我无法循环访问资源以获取任何值。

我该如何释放该资源,以便可以在下一个函数中使用它,或者如何重写IF条件以便在不取消设置资源的情况下获取值?

回答

-1

每次您抓取它时,都会将数据库光标移动到下一行。

所以odbc_fetch_row()继续前进到下一行,直到最后一行。之后,它返回false。

不幸的是,你不能将行指针移回第一条记录。

您将不得不再次查询您的DB

+0

issues数组包含我从资源中提取的一组数据,但在其他地方使用,elsewhen。该资源是我需要传递给下一个函数的资源,以便循环访问资源并提取所需的所有数据。 – VikingBlooded 2014-09-04 20:38:13

+0

好的,我明白你的意思了,这是行不通的。当循环之后返回'rs'时,资源未被设置。你的选择是再次查询数据库。 – meda 2014-09-04 20:40:00

+0

返回$ rs在循环之外工作正常,但是如果我运行循环,它是未设置的。将光标放回第1行会不会让你觉得? – VikingBlooded 2014-09-04 20:41:35

-1

另一种选择是将odbc结果存储在数组中,您可以使用foreach循环访问数组。这保留了数据,你只需要多次查询一次(有助于处理大量数据)。

while($row = odbc_fetch_array($rs)) { 
    $resultsArray[] = $row; 
} 

然后遍历它像这样...

foreach ($resultsArray as $key=>$value){ 
    //Do what you need to do... 
} 

我在我的问题here也有类似的问题,@Jeff Puckett能解释得很好。

+0

这反过来使答案不同。我提供了代码,并且我还提供了一种方法来保存该信息以进一步处理数据,以防再次查询数据库不是一种选择。 – 2017-10-04 21:45:15