PDO_OCI: Не выбирается Clob при работе в связке nginx+php-fpm
При переносе проекта с apache+mod_php на nginx+php-fpm, столкнулся с довольно непонятной проблемой при работе с Ораклом через PDO. Дело в том что, как я писал раннее, чтобы выбрать значение *LOB поля из Оракла, нужно сделать определенные манипуляции, и получив при fetch’e php_stream, сами данные получить путем stream_get_contents. Так вот, один и тот-же код под apache возвращает валидный stream, и соответственно все хорошо работает, а под nginx + php-fpm - пустую строку. Где копать непонятно, гугл очень немного знает про связку оракл+pdo+php-fpm, не говоря уже об nginx. Может быть у кого-то есть идеи?
Код такой:
function getNewsContent($id) {
$newsq = $this->DBO->prepare("select id,subject,news_body,create_date,owner_id from news where id=:id");
$newsq->execute(array(":id" => $id));
$data = $newsq->fetch(PDO::FETCH_OBJ);
$data->NEWS_BODY = stream_get_contents($data->NEWS_BODY);
return $data;
}
если последовать мануалу, и добавить туда bindParam() таким образом:
function getNewsContent($id) {
$newsq = $this->DBO->prepare("select id,subject,news_body,create_date,owner_id from news where id=:id");
$newsq->execute(array(":id" => $id));
#$newsq->bindColumn(3, $lob, PDO::PARAM_LOB);
$data = $newsq->fetch(PDO::FETCH_OBJ);
$data->NEWS_BODY = stream_get_contents($lob);
return $data;
}
то php-fpm вообще вылетает с дампом памяти в логе, и ошибкой OCI-21500, которая по сути является “внутренней ошибкой без описания”. Вобщем вилы, куда копать непонятно, но врагу не сдается наш гордый варяг ))
Если кто-то в курсе, или работал в такой связке - помогите пожалуйста )))
PHP+Oracle Faq
http://download-west.oracle.com/otndocs/tech/ias/portal/files/RG/completewebsitephpfaq2.htm Полезнейший FAQ от ораклов, о том как их чудо-продукт всетаки заставить работать с похапе.
На заметку.
Codeigniter+Oracle = жесть в драйвере
Вы все еще полагаете что в мануале CodeIgniter’а не врут о том что метод
$this->db->escape(); спасет вас от Sql Injection?
Учитывайте, что содержание этого метода в драйвере для Oracle такое:
function escape_str($str)
{
return $str;
}
Доверяй, но проверяй :))
![["Colorful poverty"] ["Colorful poverty"]](http://farm5.staticflickr.com/4041/4667960461_acd3f2ea4f_s.jpg)
![["Shadows on the bridge"] ["Shadows on the bridge"]](http://farm5.staticflickr.com/4056/4440915350_22ea792823_s.jpg)
![["Energizer"] ["Energizer"]](http://farm3.staticflickr.com/2505/4440139761_e9cb46ffa5_s.jpg)
![["Mmmmushrooms"] ["Mmmmushrooms"]](http://farm3.staticflickr.com/2750/4440914014_ce2e626c90_s.jpg)