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:
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 Previous Comments: ------------------------------------------------------------------------ [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); ------------------------------------------------------------------------ [2003-01-31 09:36:03] jens dot reibiger at rp dot vaw dot com It seems, that I have the same problem using PHP 4.3.0 on Apache 1.3.22 with Oracle 8.1.7: When I use a OciBindByName, the string is trimed at the end. This small program uses the DUAL from Oracle just to return the input: $conn = OciLogon ("x","y","z"); $val = " X X "; // last letter is a " " (blank) // direct way without a bind variable $stm1 = OciParse($conn, "select '".$val."' from dual"); OciExecute($stm1); OciFetch($stm1); echo "<b>", OciResult($stm1, 1), "</b><br>\n"; // now using a bind variable: $stm2 = OciParse($conn, "select :input from dual"); OciBindByName($stm2, ":input", &$val, 10); OciExecute($stm2); OciFetch($stm2); echo "<b>", OciResult($stm2, 1), "</b><br>\n"; OciLogoff($conn); The output is: <b> X X </b><br> <b> X X</b><br> But I want to get the same output for the direct way and when I use a bind variable. Thank you for any idea how to get the string with tailing spaces right into Oracle using a bind variable. Best wishes, Jens ------------------------------------------------------------------------ [2002-04-13 08:58:13] [EMAIL PROTECTED] try storing in a varchar2 firld, if you use CHAR oracle will trim traing spaces. ------------------------------------------------------------------------ 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