【发布时间】:2011-07-29 18:48:27
【问题描述】:
我维护一个遗留应用程序,它在 Windows Server 2003 下的 PHP/5.2.6 上运行,并通过 ODBC 连接到远程 Oracle 10g 服务器。我正在编写一个需要 CLOB 列的新功能,因此它可以存储任意大的文本,但我找不到通过良好的旧 ODBC 函数来操作它的方法。
对于写作,我尝试过这种方法:
<?php
$sql = 'INSERT INTO FOO (FOO_ID, FOO_CLOB) VALUES (?, ?)';
$stmt = odbc_prepare($conn, $sql);
$res = odbc_execute($stmt, array(1, 'Very large string'));
?>
但只要字符串大于 4,000 字节:
SQL 错误:[Microsoft][ODBC 驱动程序 Oracle]Error en el parametro 2: Datos 截断,SQL 状态 01004 在 SQL执行
...大致意思是“截断数据”。我在阅读时遇到了类似的问题:它工作正常,直到我收到超过 4,000 个字节。
是否可以使用 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: 文字不匹配 格式化字符串
【问题讨论】: