odbc_longreadlen

(PHP 4、PHP 5、PHP 7、PHP 8)

odbc_longreadlen处理 LONG 列

描述

odbc_longreadlen(resource $statement, int $length): true

控制 LONGLONGVARCHARLONGVARBINARY 列的处理。默认长度可以使用 uodbc.defaultlrl php.ini 指令设置。

参数

statement

结果标识符。

length

返回给 PHP 的字节数由参数 length 控制。如果设置为 0,则使用 odbc_result() 检索时,长列数据将直接传递到客户端(即打印)。

返回值

始终返回 true

注释

注意:

LONGVARBINARY 列的处理也受 odbc_binmode() 影响。

添加注释

用户贡献的注释 6 个注释

3
php dot net dot notes at webqs dot com
19 年前
您好

如果您在使用 PHP 通过 ODBC 与 MS SQL 连接时遇到截断或编码错误的数据问题,请尝试将 odbc.defaultlrl(在 php.ini 中或通过 ini_set())设置为一个较大的数字,例如 65536,如本注释中所述。
诀窍是知道您的数据将有多长,因此您可能需要提供一些额外空间。不幸的是,您必须在剪切之前知道字符串的长度。

这样做将允许您的应用程序一次读取最多此数量的数据。我相信这种行为有原因,但我在这 5 年的 MySQL 和 Postgres 开发中从未遇到过类似的情况。

如果您仍然遇到问题并且在表的长列中使用 Unicode 数据,请确保它设置为类型 "ntext",而不是 "text"。MSDN 中有一些关于 Unicode 数据数据类型的介绍。
这让我头疼了大约 3 天,"二进制" 数据导致浏览器崩溃和循环结果集(即在 odbc.defaultlrl 字节后重复数据)。

这个修复方法只是通过用棍子戳东西找到的。

希望对您有所帮助
2
Eion Robb
8 年前
本注释中没有提到,但 odbc_longreadlen($result, 0); 仅影响 odbc_result() 的输出。将读取长度设置为 0(或小于零)将在 odbc_fetch_object()、odbc_fetch_array() 和 odbc_result_all() 函数中只输出一个空字符串。
0
egil at wp dot pl
15 年前
我尝试过使用第一个评论中的建议,但它并没有按预期工作……我想获取所有数据,无论大小,但发生了一些奇怪的事情,我最终找到了这个解决方案(至少对于 MS SQL 2000 来说效果很好,至少对于几 MB 的二进制数据来说是如此)

<?php
// 连接
$link = odbc_connect($odbc_source_name, $user, $pass);

// 查询(本例中只有一行)
$sql = 'SELECT image_data_column FROM some_table WHERE record_id=1';

// 运行
$result = odbc_exec ($link, $sql)
if (!
$result)
{
trigger_error ('[sql] exec: '.$sql, E_USER_ERROR);
}

// 获取设置
odbc_binmode ($result, ODBC_BINMODE_PASSTHRU);
odbc_longreadlen ($result, 0);

// 获取内容
ob_start(); // 如果您预期有多行,您可能需要将此代码移到内部
while (odbc_fetch_row($result))
{
odbc_result($result, 1); // 这实际上会回显 image_data_column 的所有内容
}
odbc_free_result($result);
$contents = ob_get_clean();
?>
0
jdcard at inreach dot com
19 年前
我从 MSAccess 中的 MEMO 字段(长 varchar)读取,但数据始终在 255 个字符处被截断。我尝试了所有我能想到的 odbc_longreadlen() 和 odbc_binmode()(以及 odbc.defaultlrl)的组合,但都没有解决问题。

唯一有效的修复方法是将我的查询从 "SELECT Field1, Field2 FROM TableName" 修改为 "SELECT * FROM TableName"。

我怀疑您可以将字段强制转换为适当的数据类型,但当我经过三天奋斗后终于成功了,我甚至没有尝试。
0
匿名
21 年前
另一种方法是调整您的 php.ini 文件并设置
odbc.defaultlrl=65536
或其他足够大的数字。
lrl = 长读取长度
0
jasendorf at lcounty dot com
23 年前
我花了很多时间才弄清楚如何使用此函数。以下是一段来自 Jason Lee 的代码,我发现它可能对其他人有帮助……

$cur = odbc_exec($cnx, $query);
if(!$cur) {
/* 错误处理程序 */
}

odbc_binmode($cur, ODBC_BINMODE_PASSTHRU);
odbc_longreadlen($cur, 16384); /* 允许通过 16kb */

while(odbc_fetch_row($cur)) {
$bigger_than_4096_var = odbc_result($cur, 1);
/* 等等... */

希望这对某人有所帮助,John
To Top