Я поддерживаю устаревшее приложение, которое работает на PHP / 5.2.6 под Windows Server 2003 и подключается к удаленному серверу Oracle 10g через ODBC.Я пишу новую функцию, которой нужен столбец 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'));
?>
Но как только длина строки превышает 4000 байтов:
Ошибка SQL: [Microsoft] [Драйвер ODBC для Oracle] Ошибка en el parámetro 2:Datos truncados, состояние SQL 01004 в SQLExecute
... что примерно означает «усеченные данные».У меня похожая проблема при чтении: она работает нормально, пока я не получу более 4000 байтов.
Можно ли манипулировать столбцом CLOB с более чем 4000 байтов, используя функции PHP ODBC?
(Моя альтернатива - хранить вещи в файлах и сохранять путь к файлу только в БД, но я бы хотел этого избежать, если это возможно.)
Обновление: Следуя Совету Джастина Кейва , я выбросил драйвер ODBC от Microsoft в пользу 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: литерал не соответствует строке формата