修改PHP ODBC中odbc_exec()返回结果的最大字段长度
解决PHP ODBC读取SQL Server大文本字段不完整的问题
遇到这种ODBC默认截断长文本的情况,不用修改php.ini,完全可以通过代码层面调整参数来解决。以下是两种可靠的方案:
方案一:使用odbc_setoption设置字段最大长度
在执行存储过程之前,通过odbc_setoption函数修改ODBC连接的SQL_MAX_LENGTH选项,这个选项直接控制返回字符字段的最大长度。
示例代码:
// 假设你已经建立了ODBC连接$db // 设置SQL_MAX_LENGTH为65535(64KB,可根据需求调整为更大值,比如1048576即1MB) odbc_setoption($db, 1, 104, 65535); // 执行存储过程 $result = odbc_exec($db, "{CALL myprocedure(2, 3)}"); $m = []; while($row = odbc_fetch_array($result)) { $m[] = $row; } var_dump($m);
参数说明:
- 第一个参数:你的ODBC连接资源
$db - 第二个参数
1:代表SQL_HANDLE_DBC(连接句柄类型) - 第三个参数
104:对应ODBC的SQL_MAX_LENGTH选项 - 第四个参数:你想要设置的最大文本长度,按需调整即可
方案二:在连接字符串中指定最大长度
如果你的SQL Server ODBC驱动支持,也可以在建立连接时直接在DSN字符串中添加MaxLongVarcharSize参数,一步到位:
示例代码:
// 根据你使用的ODBC驱动调整Driver名称,比如"ODBC Driver 17 for SQL Server" $dsn = "Driver={SQL Server};Server=你的服务器地址;Database=你的数据库名;MaxLongVarcharSize=65535"; $db = odbc_connect($dsn, '用户名', '密码'); // 后续执行存储过程的代码不变 $result = odbc_exec($db, "{CALL myprocedure(2, 3)}"); $m = []; while($row = odbc_fetch_array($result)) { $m[] = $row; } var_dump($m);
注意:不同版本的SQL Server ODBC驱动对参数名称的支持可能略有差异,如果MaxLongVarcharSize不生效,可以尝试MaxLongCharSize参数。
这两种方法都不需要服务器的php.ini修改权限,完全通过代码就能解决长文本被截断的问题。
内容的提问来源于stack exchange,提问作者Hamurabi Araujo
相关产品推荐
相关产品推荐

