我维护在Windows Server 2003下运行在PHP/5.2.6上的旧应用程序,并通过ODBC连接到远程Oracle 10g服务器。我正在写一个需要CLOB列的新功能,因此它可以存储任意大的文本,但是我找不到通过良好的旧ODBC功能操作它的方法。使用PHP-ODBC处理CLOB列
对于写作,我已经试过这种方法:
<?php
$sql = 'INSERT INTO FOO (FOO_ID, FOO_CLOB) VALUES (?, ?)';
$stmt = odbc_prepare($conn, $sql);
$res = odbc_execute($stmt, array(1, 'Very large string'));
?>
但只要字符串大于4000个字节:
SQL error: [Microsoft][ODBC driver for Oracle]Error en el parámetro 2: Datos truncados, SQL state 01004 in SQLExecute
...这大致意思是“截断数据” 。阅读时遇到类似问题:直到我收到超过4000个字节时,它才能正常工作。
是否可以使用PHP ODBC函数操作超过4,000字节的CLOB列?
(我的选择是存储的东西,在文件中,只保存在数据库的文件路径,但我想避免,如果可能的。)
更新:继Justin Cave's advice,我我倾向于使用Microsoft的ODBC驱动程序来支持Oracle,而且我的代码无需更改即可插入大型字符串。我现在的问题是如何阅读CLOB列。读它,就是:
$sql = 'SELECT FOO_ID, FOO_CLOB FROM FOO';
$res = odbc_exec($conn, $sql);
while($row = odbc_fetch_array($res)){
// ...
}
...触发此运行odbc_fetch_array()
时:
ORA-01861: literal does not match format string
非常感谢您的建议,修复了INSERT问题。现在我需要SELECT部分的建议'<:-)' – 2011-04-05 09:53:34