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替代方案,因此您有两个选择:
- 第一次执行查询并通过所有行进行迭代时,将所有结果缓存到数组中[可能是更好的解决方案]
- 每次您想查看数据时,都要执行查询