Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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 在一个页面中从MSSQL获取数组会导致两次失败_Php_Sql - Fatal编程技术网

Php 在一个页面中从MSSQL获取数组会导致两次失败

Php 在一个页面中从MSSQL获取数组会导致两次失败,php,sql,Php,Sql,我对以下代码块有问题。我不能让它们都在同一个页面上,或者最后一个失败(不管它们是否改变位置,最后一个失败)。如果我把其中一个注释掉(不管是哪一个),那么另一个就行了。所以它看起来不像是实际代码的问题 不能在同一页中运行这两个吗?我显然做错了什么,所以请帮我指出是什么 while( $test = sqlsrv_fetch_array( $data, SQLSRV_FETCH_ASSOC) ) { if ($_GET['unit'] == '15min') { $newDate = $te

我对以下代码块有问题。我不能让它们都在同一个页面上,或者最后一个失败(不管它们是否改变位置,最后一个失败)。如果我把其中一个注释掉(不管是哪一个),那么另一个就行了。所以它看起来不像是实际代码的问题

不能在同一页中运行这两个吗?我显然做错了什么,所以请帮我指出是什么

while( $test = sqlsrv_fetch_array( $data, SQLSRV_FETCH_ASSOC) ) {
    if ($_GET['unit'] == '15min') { $newDate = $test['dt']->format('H:i:s'); }
    if ($_GET['unit'] == 'hour') { $newDate = $test['dt']->format('m/d H:i'); }
    if ($_GET['unit'] == 'day') { $newDate = $test['dt']->format('Y/m/d'); }
    $dates[] = $newDate;
    $values[] = $test[$pick_graph];
}
第二个呢

while( $row = sqlsrv_fetch_array( $data, SQLSRV_FETCH_ASSOC) ) {
$newDate = $row['dt']->format('Y/m/d_H:i:s');

    echo    '<tr>'.
            '<td>'.$row['net']."</td>".
            '</tr>';
}
while($row=sqlsrv\u fetch\u数组($data,sqlsrv\u fetch\u ASSOC)){
$newDate=$row['dt']->格式('Y/m/d_H:i:s');
回显“”。
“.$row['net']”。
'';
}

没有错误消息或任何东西。当第二个循环运行时,就好像$data是空的或者什么东西,因为它不循环任何东西,在其中放入回音不会输出任何东西。

就像计算机科学中的许多模式一样,例如文件IO,大多数库中的查询结果被视为流。您可以在结果出现时获得结果,但不能向后跳过,也不能在不重新运行查询的情况下重新开始

您可以再次运行查询,也可以将结果缓存在数组中

$cache = array();
while ($row = sqlsrv_fetch_array($data, SQLSRV_FETCH_ASSOC))
    $cache[] = $row;
然后,您可以在两个位置的
foreach
上执行与问题相同的逻辑

在大多数情况下,缓存是更好的选择

但是,如果您谈论的是一个非常大的结果集(1000),那么最好运行两次查询,因为一次只需要在RAM中存储一行。已使用的行将被垃圾收集


与所有性能问题一样,如果它有那么大的影响,请从两个方面对其进行分析,并确定哪一个符合您的目标。

与计算机科学中的许多模式(如文件IO)一样,大多数库中的查询结果都被视为一个流。您可以在结果出现时获得结果,但不能向后跳过,也不能在不重新运行查询的情况下重新开始

您可以再次运行查询,也可以将结果缓存在数组中

$cache = array();
while ($row = sqlsrv_fetch_array($data, SQLSRV_FETCH_ASSOC))
    $cache[] = $row;
然后,您可以在两个位置的
foreach
上执行与问题相同的逻辑

在大多数情况下,缓存是更好的选择

但是,如果您谈论的是一个非常大的结果集(1000),那么最好运行两次查询,因为一次只需要在RAM中存储一行。已使用的行将被垃圾收集

与所有性能问题一样,如果它非常重要,请从两个方面对其进行分析,并确定哪一个符合您的目标。

我猜您只调用了一次,并且希望迭代两次结果

在这种情况下,这是预期和想要的行为。否则,您将永远卡在循环中(如果
sqlsrv\u fetch\u array
将达到最终结果,它将重新开始)

例如,看看MySQLs,但根据我们的说法,没有SqlSrv替代方案,因此您有两个选择:

  • 第一次执行查询并通过所有行进行迭代时,将所有结果缓存到数组中[可能是更好的解决方案]
  • 每次您想查看数据时,都要执行查询
我猜您只调用了一次,并且希望将结果迭代两次

在这种情况下,这是预期和想要的行为。否则,您将永远卡在循环中(如果
sqlsrv\u fetch\u array
将达到最终结果,它将重新开始)

例如,看看MySQLs,但根据我们的说法,没有SqlSrv替代方案,因此您有两个选择:

  • 第一次执行查询并通过所有行进行迭代时,将所有结果缓存到数组中[可能是更好的解决方案]
  • 每次您想查看数据时,都要执行查询

可能是因为您已经到达了结果集的末尾,您可以创建一个while循环来创建一个数组,然后对其执行操作。或者您可以重新创建结果集,这可能不太可取。这可能是因为您已经到达了结果集的末尾,您可以创建一个while循环来创建一个数组,然后对其执行操作。或者您可以重新创建可能不太可取的结果集。