PHP + PDO. Не возращает значения из NCLOB

stpstp2

Новичок
Имеется БД Oracle и PHP с PDO.

Примерно такой скрипт:

$query = $this->PDO->prepare("SELECT COLUMN0 FROM table");
$query->bindColumn(1, $column, PDO::pARAM_LOB);
$query->execute()
$row = $query->fetchAll(PDO::FETCH_ASSOC);

Итак грабли: столбец COLUMN0 имеет тип данных NCHAR, кодировка AL32UTF8 (присутствуют нац. символы). При небольшом количестве символов (2000) все работает как надо, но если превысит эту цифру ничего не работает :)

COLUMN0 получаем как поток, который надо вывести, казалось бы просто функцией stream_get_contents(). Соответсвенно:

echo stream_get_contents($column); //работает до 2000 симлов

Но получаем пустую строку(если > 2000 сим.).... На всякий случай:

echo stream_get_contents($row['0']['COLUMN0']);

Тоже пустая строка(если > 2000 сим.). И еще раз на всякий случай:

echo var_dump($content);

Выдает resource(41) of type (stream) соответственно.

Есть ли у кого-нибудь соображения каким образом мне можно вывести данные из COLUMN0 если количество символов будет не 2000, а допустим 200000? Варианты изменить кодировку и сменить БД не предлагать. Поиск пока не принес результатов :(

Заранее благодарю :)
 

tony2001

TeaM PHPClub
версия PHP? версия oracle?
reproduce case? (create table .. + insert into .. + <?php .. на несколько строк ?>)
 

stpstp2

Новичок
PHP Version 5.2.13, Oracle Database 10g Release 10.2.0.4.

Таблица может быть абсолютно любой. Создавалася и тестовая, только с id и nclob полями - аналогичная ерунда. Несколько строк из пхп выше. Всё идентично. Инсерт - поле просто забилось множеством национальных символов.
 

tony2001

TeaM PHPClub
>PHP Version 5.2.13
На чем-то более новом пробовали?

>Oracle Database 10g Release 10.2.0.4.
База только одна или есть возможность попробовать на разных?
Это зависит от кодировки или нет? Если нет, то при чем тут "Варианты изменить кодировку и сменить БД не предлагать"?

>Несколько строк из пхп выше.
Спасибо, у меня с глазами всё в порядке, но мне нужен готовый пример, который я дам человеку, он там заполнит координаты базы, выполнит код и скажет - ДА, есть проблема или НЕТ, нет проблемы.
Если есть проблема - то он пойдет её исправлять, работа у него такая в Oracle Corp. Нет - будем дальше говорить.
Говорить ему "иди туда, там в посте есть какие-то обрывки, сам собери себе тест-кейс" я не буду по очевидным причинам.
 

stpstp2

Новичок
Нет, более новым ни чем не пробовали.

В этой кодировке сервер и база одна. Установлена аналогичная база, но с другой кодировкой, там все работает нормально (без нац. символов, CLOB).

Через toad данные берутся нормально. Я так думаю это проблема PDO.

Спасибо конечно за переправку тест кейса, позже соберу :)


А есть какие-нибудь варианты, предположения?
 

tony2001

TeaM PHPClub
>Нет, более новым ни чем не пробовали.

Попробуйте новый PHP хотя бы.
С OCI8 это работает или нет? http://php.net/oci8

>В этой кодировке сервер и база одна. Установлена аналогичная база, но с другой кодировкой, там все работает нормально
>(без нац. символов, CLOB).

Я не вижу никаких отличий для NCLOB в коде.
И какой-либо зависимости от кодировки тоже.

Точно никаких ворнингов/ошибок нет?
 

stpstp2

Новичок
Новый PHP и переход на OCI довольно сложная процедура на данный момент. Пусть это будет крайним вариантом, т.к. сейчас переноситься лишь одна таблица в эту кодировку. Проект рабочий, и есть еще куча других дел. В общем пока недостаток времени этим заниматься. Нужно какое-то более простое решение, если это конечно возможно...

Да, верно. Отличий нет абсолютно никаких. Все что я делаю - меняю параметры конекта, только и всего.
 

tony2001

TeaM PHPClub
Попробовать на OCI8 - это от силы 5 строк и не больше минут.
 

stpstp2

Новичок
Да. Ожидания подтвердились - OCI справляется.... Выходит проблема PDO. Благодарю. Думаю как дальше с ним жить)
 
Сверху