ID: 27485 Updated by: [EMAIL PROTECTED] Reported By: jseverson at myersinternet dot com -Status: Assigned +Status: Wont fix Bug Type: Feature/Change Request Operating System: Redhat Linux kernel 2.4.18-3 PHP Version: 4.3.4 Assigned To: tony2001 New Comment:
>It would be NICE if PHP had a method of saving null into your descriptor >so that you can keep your clobs consistent, since the presence of empty >locators behave differently when selecting from them as compared with null clobs. there is no need in such method, NULL clobs/blobs/anything alse can be saved using SQL: INSERT INTO clobs_table (...., clob_field) VALUES(....,NULL); Previous Comments: ------------------------------------------------------------------------ [2004-03-05 18:43:16] [EMAIL PROTECTED] I would classify this as a feature request then, assinging to the the maintainer, Antony. ------------------------------------------------------------------------ [2004-03-05 14:36:00] jseverson at myersinternet dot com After several more hours of investigating, we have determined that our first hypothesis was not true. I am not quite sure this is still a PHP bug or not, as it seems like is more a case of a behavior of Oracle. Here is a script I've setup to demonstrate the behavior: http://test1.myersinternet.com/php_test/test_clobs.html To briefly summarize, a clob can exist in two states, both of which APPEAR to be "null" when viewing the clob in TOAD, TORA, or SQLPLUS. In one state, the clob is actually "null", which is the case where the column is ommitted completely when doing an insert. The second case, the clob is an "empty locator", which is the case when specifying the column in the insert, using the empty_clob() function, but then not performing a save on the oci descriptor. My script demonstrates both of these cases and their output. Oracle Documentation explaining this behavior: http://download-west.oracle.com/docs/cd/A87860_01/doc/appdev.817/a76940/adl02bs5.htm#117091 "You can set an internal LOB -- that is, a LOB column in a table, or a LOB attribute in an object type defined by you-- to be NULL or empty: Setting an Internal LOB to NULL: A LOB set to NULL has no locator. A NULL value is stored in the row in the table, not a locator. This is the same process as for all other datatypes. Setting an Internal LOB to Empty: By contrast, an empty LOB stored in a table is a LOB of zero length that has a locator. So, if you SELECT from an empty LOB column or attribute, you get back a locator which you can use to populate the LOB with data via one of the six programmatic environments, such as OCI or PL/SQL(DBMS_LOB)." It would be NICE if PHP had a method of saving null into your descriptor so that you can keep your clobs consistent, since the presence of empty locators behave differently when selecting from them as compared with null clobs. ------------------------------------------------------------------------ [2004-03-05 02:42:00] [EMAIL PROTECTED] The same results(i.e. allright) with 4.3.4. By the way, PHP 4.3.4 was released before all these changes you're talking about, in the early november, 2003. ------------------------------------------------------------------------ [2004-03-04 12:22:05] jseverson at myersinternet dot com Can you please try PHP version 4.3.4? We looked at the CVS log for the OCI changes done and it looks like a lot of work was done in December, 2003 dealing with LOBs, which wouldn't be present in 4.3.3. Thanks ------------------------------------------------------------------------ [2004-03-04 01:59:26] [EMAIL PROTECTED] I can't get your results with this code. In both cases I get empty arrays, if OCI_RETURN_NULLS wasn't used or array of NULLs, if it was. Tested with PHP5-cvs, PHP4-cvs, PHP4.3.3. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/27485 -- Edit this bug report at http://bugs.php.net/?id=27485&edit=1