
在 PHP 中使用 sqlsrv_fetch_array 函数从 SQL Server 数据库提取数据时,可能会遇到返回的数组包含重复键值对的情况,例如 array(6) { [0]=youjiankuohaophpcn string(2) “99” [“id”]=> string(2) “99” [1]=> int(9) [“survey_id”]=> int(9) [2]=> string(10) “Very Small” [“item”]=> string(10) “Very Small” }。 这意味着每个字段的值在数组中出现了两次,一次是数字索引,另一次是关联索引。 这会导致数据处理效率降低,并可能影响后续的 CSV 文件生成。 要解决这个问题,需要在调用 sqlsrv_fetch_array 函数时,明确指定所需的 fetchType。
解决方案:指定 SQLSRV_FETCH_ASSOC 作为 fetchType
sqlsrv_fetch_array 函数的第二个参数允许指定返回数组的类型。 默认情况下,如果没有指定,函数会同时返回关联数组和数字索引数组,从而导致重复的条目。 要仅获取关联数组,可以使用 SQLSRV_FETCH_ASSOC 常量。
以下是修改后的代码示例:
<?php
$serverName = "your_server_name";
$connectionInfo = array( "Database" => "your_database_name", "UID" => "your_user_id", "PWD" => "your_password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
echo "连接失败。<br />";
die( print_r( sqlsrv_errors(), true));
}
$sql = "SELECT * FROM Percept_Segments";
$stmt = sqlsrv_query( $conn, $sql);
if( $stmt === false ) {
die( print_r( sqlsrv_errors(), true));
}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
var_dump($row);
// 在这里可以进行 CSV 文件的写入操作,例如 fputcsv()
// 示例:
// $fp = fopen('output.csv', 'a');
// fputcsv($fp, $row);
// fclose($fp);
//exit(); // 调试时使用,只输出第一行
}
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
代码解释:
- sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC): 这是关键的一行。 SQLSRV_FETCH_ASSOC 告诉函数只返回关联数组,数组的键是数据库表的列名。
- 连接数据库: 代码首先建立与 SQL Server 数据库的连接。请替换 your_server_name, your_database_name, your_user_id, 和 your_password 为你的实际数据库连接信息。
- 查询数据: 使用 SQL 查询语句从 Percept_Segments 表中选择所有数据。
- 循环处理结果: while 循环遍历查询结果的每一行。 var_dump($row) 用于输出数组的内容,方便调试。
- CSV 写入示例: 代码中注释掉的部分展示了如何使用 fputcsv() 函数将数据写入 CSV 文件。 你需要打开一个文件,然后将每一行数据写入文件,最后关闭文件。
- 释放资源和关闭连接: sqlsrv_free_stmt() 释放与语句关联的资源, sqlsrv_close() 关闭数据库连接。
注意事项:
- 确保已安装并启用了 PHP 的 SQL Server 驱动程序 (sqlsrv)。
- 根据实际情况修改数据库连接信息。
- 根据需要调整 CSV 文件的写入方式,例如指定分隔符、编码等。
- 如果只需要数字索引数组,可以使用 SQLSRV_FETCH_NUMERIC。
- SQLSRV_FETCH_BOTH 是默认值,同时返回关联数组和数字索引数组。
总结:
通过在 sqlsrv_fetch_array 函数中指定 SQLSRV_FETCH_ASSOC 作为 fetchType,可以有效地避免获取包含重复键值对的数组,从而简化数据处理流程,提高 CSV 文件生成效率。 这种方法不仅可以避免冗余数据,还可以使代码更易于理解和维护。 在处理 SQL Server 数据导出到 CSV 文件的场景中,这是一个非常实用的技巧。
以上就是将 SQL 数据导出到 CSV 文件时去除重复数组条目的详细内容,更多请关注php中文网其它相关文章!


