unixODBC + PHP,无效的字符串或缓冲区长度错误消息

Posted

技术标签:

【中文标题】unixODBC + PHP,无效的字符串或缓冲区长度错误消息【英文标题】:unixODBC + PHP , Invalid string or buffer length error message 【发布时间】:2010-12-13 11:14:23 【问题描述】:

我通过 unixODBC 使用 php 访问 AS400/DB2 但是我的 AS400 的某些字段名称以“££..”命名(无法更改) 当我尝试从我的 PHP 页面启动一个 sql 查询时

select * from LIBNAME.TABLE where ££FIELD like 'test%'

我总是收到同样的错误信息

SQL 错误:[unixODBC][IBM][System i Access ODBC Driver]无效的字符串或缓冲区长度。,SQLExecDirect 中的 SQL 状态 S1090

如果有人有线索。

【问题讨论】:

【参考方案1】:

尝试在查询执行之前添加此语句:

setlocale(LC_CTYPE, 'en_US');

有关问题的更详细说明: http://bugs.centos.org/view.php?id=3187

【讨论】:

【参考方案2】:

DB2 应该有某种封装标识符的方法。一些数据库使用双引号

select * from "tableID" where "fieldID" like 'blah%'

mysql 使用反引号。不确定是否使用 DB2,但应该不难发现和尝试。如果这不起作用,请查看是否有办法用字符串中的十六进制值表示字符。像 'hello\x0A\x0Dthere' 将是单词 'hello' 和 'there' 由换行符分隔。您可能只需要找到 £ 的价值。

【讨论】:

以上是关于unixODBC + PHP,无效的字符串或缓冲区长度错误消息的主要内容,如果未能解决你的问题,请参考以下文章

无效数据,块必须是字符串或缓冲区,而不是对象 - 离子和火力

Cordova:无效数据,块必须是字符串或缓冲区,而不是对象

[Access][Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度 Invalid string or buffer length

故意使 HTMLMediaElement 或 HTMLVideoElement 缓冲区无效或清除?

ValueError:无效的文件路径或缓冲区对象类型:<class 'tkinter.StringVar'>

ValueError:无效的文件路径或缓冲区对象类型:<class 'dict'> python