PHP 4.0 Bug #4200: OCIBindByName is unable to bind strings of Zero Length

From: Date: Thu, 20 Apr 2000 15:59:22 +0000
Subject: PHP 4.0 Bug #4200: OCIBindByName is unable to bind strings of Zero Length
Groups: php.dev 
Request: Send a blank email to php-dev+get-18059@lists.php.net to get a copy of this message
From: jnield@impole.com Operating system: Linux 2.2.5 (Redhat 6.1+Patches) PHP version: 4.0 Release Candidate 1 PHP Bug Type: Oracle related Bug description: OCIBindByName is unable to bind strings of Zero Length When using OCIBindByName, strings of zero length can't be bound. This is a major problem for me because I use bind-variables for input from the user, to prevent the input from being interpreted as SQL. It must be possible to insert a string of zero length. Whether that is treated as NULL or not should be left to the database if possible. It seems that this change between 3.1.14 and 4.0 RC1 occurred because strings are now being passed to the OCI C library's OCIBindByName() as type SQLT_CHR instead of SQLT_STR. OCIBindByName() does not seem to accept a value of 0 for 'value_sz' when the type is SQLT_CHR, and there is no '\0' at the end of the string to look for. Let me know if there's anything I can do to help. This is preventing us from really testing RC1. /* EXAMPLE SCRIPT 1 (assume $conn is an open connection) */ $val = ""; $stmt = OCIParse($conn, "select ''||:v_bind||'' from dual"); OCIBindByName($stmt, ":v_bind", &$val, -1); /* comes from ->value.str.len */ /*** RESULT: Warning bindlength == 0 (Correct behaviour as in 3.1.14) */ OCIExecute($stmt); /*** RESULT: ORA-01008 not all variables bound (problem...) */ OCIFreeStatement($stmt); /* EXAMPLE SCRIPT 2 */ $stmt = OCIParse($conn, "select ''||:v_bind||'' from dual"); OCIBindByName($stmt, ":v_bind", &$val, 0); /* Explicitly of zero length */ /*** RESULT: ORA-01009: missing mandatory parameter */ OCIExecute($stmt); /*** RESULT: ORA-01008: not all variables bound */ OCIFreeStatement($stmt);

« previous php.dev (#18059) next »