PHP Bugs  
php.net | support | documentation | report a bug | advanced search | search howto | statistics | login

go to bug id or search bugs for  

Bug #39988 oci_define_by_name column type is ignored
Submitted:29 Dec 2006 10:21pm UTC Modified: 11 Jan 2007 12:01pm UTC
From:christopher dot jones at oracle dot com Assigned to:tony2001
Status:Closed Category:OCI8 related
Version:5.2.0 OS:n/a
View/Vote Developer Edit Submission

[29 Dec 2006 10:21pm UTC] christopher dot jones at oracle dot com
Description:
------------
The datatype passed to oci_define_by_name() is ignored.

Patch is something like:

Index: oci8_interface.c
===================================================================
RCS file: /repository/php-src/ext/oci8/oci8_interface.c,v
retrieving revision 1.8.2.7.2.6
diff -u -r1.8.2.7.2.6 oci8_interface.c
--- oci8_interface.c  21 Dec 2006 22:08:26 -0000  1.8.2.7.2.6
+++ oci8_interface.c  29 Dec 2006 22:10:30 -0000
@@ -52,7 +52,7 @@
   zval *stmt, *var;
   char *name;
   int name_len;
-  long type = SQLT_CHR;
+  long type = 0;
   php_oci_statement *statement;
   php_oci_define *define, *tmp_define;
 
Index: oci8_statement.c
===================================================================
RCS file: /repository/php-src/ext/oci8/oci8_statement.c,v
retrieving revision 1.7.2.14.2.17
diff -u -r1.7.2.14.2.17 oci8_statement.c
--- oci8_statement.c  25 Dec 2006 21:47:02 -0000  1.7.2.14.2.17
+++ oci8_statement.c  29 Dec 2006 22:10:30 -0000
@@ -506,7 +506,11 @@
 
       /* find a user-setted define */
       if (statement->defines) {
-       
zend_hash_find(statement->defines,outcol->name,outcol->name_len,(void
**) &outcol->define);
+          if
(zend_hash_find(statement->defines,outcol->name,outcol->name_len,(void
**) &outcol->define) == SUCCESS) {
+              if (outcol->define->type) {
+                  outcol->data_type = outcol->define->type;
+              }
+          }
       }
 
       buf = 0;

Reproduce code:
---------------
These two queries incorrectly produce the same results:

  $stmt = oci_parse($c, "SELECT fileimage FROM phptestrawtable");
  var_dump(oci_define_by_name($stmt, 'FILEIMAGE', $fi, SQLT_STR));
  oci_execute($stmt);

  while (oci_fetch($stmt)) {
     echo "file md5:" . md5($fi) . "\n";
  }

  $stmt = oci_parse($c, "SELECT fileimage FROM phptestrawtable");
  var_dump(oci_define_by_name($stmt, 'FILEIMAGE', $fi));
  oci_execute($stmt);

  while (oci_fetch($stmt)) {
     echo "file md5:" . md5($fi) . "\n";
  }

I'll mail a full .phpt testcase to Tony.

[11 Jan 2007 12:01pm UTC] tony2001@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


RSS feed | show source 

PHP Copyright © 2001-2009 The PHP Group
All rights reserved.
Last updated: Sat Nov 21 10:30:49 2009 UTC