php - PHP sqlsrv_fetch_array 未显示所有结果
问题描述
我sqlsrv_connect
在 PHP 中使用连接到 MSSQL 数据库。连接工作正常,我可以执行查询,但我有一个问题,即指定的返回行数与sqlsrv_fetch_array
while 循环执行的迭代次数不同。谁能帮忙解释一下为什么?
这是我的代码...
// Establish a connection to the MSSQL database
$conn = sqlsrv_connect($serverName, $connectionOptions);
if ($conn === false) {
// If there was an error format and display
die(formatErrors(sqlsrv_errors()));
}
// Set the query to the MSSQL database
$tsql = "SELECT xyz FROM db_table WHERE field = ? ORDER BY field ASC"; ***** DUMMY EXAMPLE ******
$params = array($some_value);
// Executes the query
$stmt = sqlsrv_query($conn, $tsql, $params, array( "Scrollable" => 'static' ));
// Was there an error
if ($stmt === false) {
die(formatErrors(sqlsrv_errors()));
}
$row_count = sqlsrv_num_rows($stmt);
echo "Total rows: ".$row_count."<br/>"; ****** THIS RETURNS 28463 ROWS, WHICH IS CORRECT ******
// Update the response
$response = array(0 => array("status" => "success", "value" => "connected", "records" => "0"));
// Set the row count start position
$i = 1;
// Iterate through the results
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
// Increase the processed row count
$i++;
}
echo $i; ****** THIS RETURNS 5978 ROWS, WHICH IS INCORRECT ******
最终在生产中,这将在 while 循环中执行一个动作,但我首先需要弄清楚为什么它没有遍历所有行。
解决方案
我终于能够完成这项工作,但使用for
循环而不是while
循环,并使用显式定义行SQLSRV_SCROLL_ABSOLUTE
for ($i=0; $i < sqlsrv_num_rows($stmt); $i++){
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_ABSOLUTE, $i);
// Do something here with $row data
echo "Row: ".trim($i);
}
这将按预期返回所有 28463 行。
推荐阅读
- ios - Swift 4 - 在其 UIViewController 中更新 UIPageViewController 中的变量
- c++ - 在多线程环境中交换 C++ 映射对象
- javascript - 返回数组中偶数的总和
- python - 有没有办法通过扩展列表或元组中的键来引用字典元素?
- ffmpeg - 使用专辑封面将 mp3 转换为 mp4
- freeswitch - 从控制台启动 FreeSWITCH 时如何设置 PIDfile?
- bazel - Bazel 构建 NodeJS C++ 插件
- java - 如何获得字符串的平方根
- javascript - 动态添加的对象:测验问题和答案作为收音机,但无法读取 null 的“已检查”属性
- php - PHP 将字符串拆分到下一个句点 (.)