ID:               14013
 Updated by:       [EMAIL PROTECTED]
 Reported By:      az at i7 dot com dot au
 Status:           Closed
 Bug Type:         OCI8 related
 Operating System: Linux 2.2, Solaris 2.6
 PHP Version:      4.0.6
 New Comment:

I'll look into it, but it's not a PHP problem indeed.

That's how OCI works. 

Just don't bind text variables if you don't want to strip trailing
spaces.


Previous Comments:
------------------------------------------------------------------------

[2004-04-07 08:33:35] m dot ford at lmu dot ac dot uk

Thanks, Rasmus -- very informative reference.



I see that if you specify your bind variable as external datatype
SQLT_CHR, trailing spaces are indeed stripped, so this is presumably
what PHP is using at the moment.  However, there are other SQLT_ types
where this stripping is not performed, and I wonder if there is any
chance that one of these could be used instead.  In particular, the
external datatype SQLT_STR utilizes a C-style null-terminated string --
I don't know enough about PHP internals to know if this would be easy
to manage or not, or if there would be a bad performance hit, but as we
seem to have a fairly active OCI maintenance team at the moment,
perhaps someone could look into it?



Cheers!



Mike

------------------------------------------------------------------------

[2004-02-02 04:00:50] [EMAIL PROTECTED]

Guys, I realize the explanation for the closure wasn't very good, but
it is correct.  For some reason the underlying Oracle OCI call strips
trailing spaces on a bind but not on a regular insert/update on a
varchar2 field.  You would have to ask Oracle to explain why.



Read the VARCHAR2 section of this URL:

http://sales.esicom.com/sales/oracle/appdev.816/a76975/oci03typ.htm

------------------------------------------------------------------------

[2003-12-09 12:38:30] russ at iris dot washington dot edu

I also wonder why this is closed.

Just encountered a simpler case:



I cannot select using this field:



    LOCATION  NOT NULL VARCHAR2(2)



those records which have '  ' (two spaces) for

that LOCATION's value. Non-space values work fine.

Interactive SQLPLUS confirms those rows do exist.



Oracle 8

PHP 4.3.1

Solaris SunOS dmc 5.7 sun4u sparc SUNW,Ultra-Enterprise

------------------------------------------------------------------------

[2003-08-18 11:52:36] m dot ford at lmu dot ac dot uk

My mistake -- it's Closed, not Open ("green means Closed, green means
Closed!"), but, to my mind, still without satisfactory explanation.



Cheers!

------------------------------------------------------------------------

[2003-08-18 11:49:55] m dot ford at lmu dot ac dot uk

There still doesn't seem to be a satisfactory explanation posted here,
and it's still Open, so could someone please address the salient
issue:



If the database column is defined as VARCHAR2, why does this strip
trailing blanks on the inserted value:



$text = "  this line has spaces   ";

$st = ociparse($db, "insert into test values (:text)");

ocibindbyname($st, ":text", &$text, 2000);

ociexecute($st);



whilst this does not:



$text = "  this line has spaces   ";

$st = ociparse($db, "insert into test values '$text')");

ociexecute($st);

------------------------------------------------------------------------

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/14013

-- 
Edit this bug report at http://bugs.php.net/?id=14013&edit=1

Reply via email to