php - PHP sqlsrv_fetch_array 只循环一半的结果
问题描述
当循环遍历(60 行)的结果集时,PHP 只循环遍历一些结果。如果我不对结果进行排序,它会返回四个。如果我按他们的 ID 对结果进行排序,它会返回 31 个结果。我相信这可能与每行数据的大小有关,但我不能确定。我从中选择的视图有 50 列,其中大约四分之一是 HTML 代码,我相信它们的数据类型为 varchar(max)。我正在使用以下规格和代码。
Microsoft SQL SERVER 2008
PHP 7.2
ODBC 17
PHP 执行时间为 900 秒
PHP 内存限制为 4096MB
$connection_info = array();
$connection_info["Database"] = "database";
$connection_info["UID"] = "username";
$connection_info["PWD"] = "password"
$connection = sqlsrv_connect( "server", $connection_info );
result = sqlsrv_query( $connection, "SELECT * FROM server.[database].[dbo].[table]", array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ) );
while( $row = sqlsrv_fetch_array( $result, SQLSRV_FETCH_ASSOC ) ) {
echo $row["id"] . " " . var_dump( sqlsrv_errors() ) . "<br>";
}
echo var_dump( sqlsrv_errors() );
sqlsrv_errors() 的最后一次检查返回错误:
数组(1) { [0]=> 数组(6) { [0]=> 字符串(5) "01004" ["SQLSTATE"]=> 字符串(5) "01004" [1]=> int(0) ["code"]=> int(0) [2]=> string(71) "[Microsoft][ODBC Driver 17 for SQL Server]字符串数据,右截断" ["message"]=> string(71) " [Microsoft][ODBC Driver 17 for SQL Server]字符串数据,右截断" } }
解决方案
我有一个类似的问题。
我发现循环似乎会随机停止。这是我解决问题的方法。当循环到达服务器产生错误的点时(可以使用'sqlsrv_errors'显示)
while( $row = sqlsrv_fetch_array( $result, SQLSRV_FETCH_ASSOC ) ) {
echo $row["id"] . " " . var_dump( sqlsrv_errors() ) . "<br>";
}
这是我避免这个问题的方式:
$params = array();
$options = array("Scrollable" => SQLSRV_CURSOR_KEYSET);
$result = sqlsrv_query($conn, $query, $params, $options);
for ($i = 0; $i < sqlsrv_num_rows($result); $i++) {
$obj = sqlsrv_fetch_array($newq, SQLSRV_FETCH_NUMERIC, SQLSRV_SCROLL_ABSOLUTE, $i);
echo $row[0];
}
我认为问题的发生是因为它不知道如何处理它所呈现的错误,因此退出循环。
推荐阅读
- c# - 添加链接的 appsettings.json
- c++ - 模板类中类的构造函数
- amazon-web-services - AWS CLI dynamodb 更新项
- nhibernate - Nhibnerate .net Core 3.1 初始化
- python - 使用 Python Schedule 时出现 ModuleNotFoundError
- visual-studio-code - 如何更改 vscode 中的选项卡放置突出显示颜色?
- elasticsearch - 我想在索引 A 上使用来自索引 B 的计数聚合在 Elasticsearch 中创建脚本分数,这可能吗?
- rust - 在 Rust 中引用 impl 块中的特征
- python-3.x - AttributeError:“ShiftChangeFilter”对象没有属性“values_list”
- javascript - 如何打印出存储在 vue.js 中本地驱动器上的 pdf 文档?