暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
PHP_ODBC+GBase8S查询大于255字节lvarchar字段的方法
328
1页
2次
2020-11-20
免费下载
PHP_ODBC+GBase8S
查询大于
255
字节
lvarchar
字段的方法
PHP
通过
PDO_ODBC
模块查询
GBase8S
数据库的时候,如
lvarchar
字段大于
255
,返
回空值。
建表语句:
create table t1(a lvarchar(256));
Insert into t1 values (‘abc’);
问题代码:
$dbh = new PDO('odbc:gbasedb, 'gbasedbt', 'gbasedbt');
foreach($dbh->query('select * from t1') as $row) { print_r($row);}
返回结果为空。
解决方法是设置
PDO::ODBC_ATTR_USE_CURSOR_LIBRARY
属性为
2
,代码如下:
$dbh = new PDO('odbc:gbasedb, 'gbasedbt', 'gbasedbt',
array(PDO::ODBC_ATTR_USE_CURSOR_LIBRARY => 2));
foreach($dbh->query('select * from t1') as $row) { print_r($row);}
返回正常结果。
原因分析:
pdo_odb
对大
255
字节
lvarchar
字段小于
255
字节
lvarchar
字段理方
不同。
lvarchar
类型小于等于
255
的时候,
pdo_odbc
接口的处理方式是:
1)
分配一个和列宽相同的内存
2)
调用
SQLBindCol
绑定内存
3)
调用
SQLFetchScroll
获取行
4)
从绑定的内存获取结果
lvarchar
类型大于
255
的时候,
pdo_odbc
接口的处理方式是:
1)
分配一个
256
字节大小的缓存
2)
调用
SQLFetchScroll
获取行
3)
调用
SQLGetData
接口分多次获取内容,从缓存填充到目标内存
可以看到,这两种情况的主要区别是是否通过
SQLBindCol
绑定列内存以及最后获取列
内容的方式。
使
pdo_odbc
ODBC_ATTR_USE_CURSOR_LIBRARY
(
0)
unixODBC driver manager
cursor
SQLBindCol
绑定列,
cursor
库的
SQLFetchScroll
会报错,导致查询返回空值。
ODBC_ATTR_USE_CURSOR_LIBRARY
2
unixODBC driver manager
调用
GBase8s
SQLFetchScroll
,在未调用
SQLBindCol
绑定列的情况下可以正常工作。
官网网址:
www.gbase.cn
of 1
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜