Skip to Main Content

DevOps, CI/CD and Automation

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

PHP and OCI-Lob::read from oracle clob

JakeMorganSep 18 2014 — edited Sep 22 2014

I'm having a weird problem with PHP and the OCI-Lob::read method.

We have a page that connects to the database and pulls all the other fields out with no problems. However, it when it comes to the clobs, only a small portion of the actual data is retrieved.

The code uses:

$content= $features[14]->read(2000); echo $content;

And we're getting a tiny section of the field returned (only about 185 out of a total 553 chars). The really strange thing is that no matter what the length specified is - it still only returns a small section - and the cut off seems to actually be 549 bytes/chars - anything below the read(length) specified as 549 shortens the returned string (even though what is returned is far less the 549 chars) but anything over 549 makes no difference.

Additionally, we've used the OCI-Lob::load method with exactly the same results where only a portion of the actual contents of the clob field is returned.

Any ideas what could be causing this?

PHP version is 5.1.6

RDBMS is 11.2.0.4.2

Following shows OCI config via phpinfo()

oci8

OCI8 Support

enabled

Revision

$Revision: 1.269.2.18 $

Active Persistent Connections

1

Active Connections

1

Oracle Instant Client Version

  1. 10.2

Temporary Lob support

enabled

Collections support

enabled

Directive

Local Value

Master Value

oci8.default_prefetch

10

10

oci8.max_persistent

-1

-1

oci8.old_oci_close_semantics

0

0

oci8.persistent_timeout

60

60

oci8.ping_interval

60

60

oci8.privileged_connect

Off

Off

oci8.statement_cache_size

20

20

This post has been answered by JakeMorgan on Sep 22 2014
Jump to Answer

Comments

Your version of OCI8 corresponds to PECL OCI8 1.2.1, which is very old.  You can see the subsequent fixes in the changelog PECL :: oci8 Changelog In particular there have been a number of LOB changes.

I would start by upgrading. Ideally you would use PHP 5.5 with PECL OCI8 2.0.8 and Instant Client 11.2.0.4.  Otherwise just upgrade to PECL OCI8 1.4.10 and Instant Client to 11.2.0.4.  The following instructions should help: Installing PHP and the Oracle 11g Instant Client for Linux and Windows

I am suggesting using PECL OCI8 because it is more recent than the OCI8 in the PHP 5.1.x - 5.5.x bundles.  PHP 5.6 natively has OCI8 2.0 but you may not want to upgrade an existing site to PHP 5.6 until this branch of PHP has matured.

JakeMorgan
Answer

It turns out that there was some issue with the tns alias.  To test, the connect string was hard-coded and the clob data was then returned successfully without truncation.  Using the tns alias in the connect descriptor seems to have been the root of the issue so there must have been some small syntax error in tnsnames.ora although I'll be damned if I can figure out why it was partially retrieving the clob!

Marked as Answer by JakeMorgan · Sep 27 2020

I appreciate hearing the resolution.  I'm glad you got it worked out.

(I'd still recommend upgrading!)

1 - 3
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Oct 20 2014
Added on Sep 18 2014
3 comments
2,419 views