Subscribe: [Closed] oci_define_by_name column type is ignored
http://bugs.php.net/rss/bug.php?id=39988&format=rss
Added By: Feedage Forager Feedage Grade C rated
Language: English
Tags:
define  interface  oci define  oci interface  oci statement  oci  outcol define  outcol  statement defines  statement  stmt oci  stmt 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: [Closed] oci_define_by_name column type is ignored

OCI8 related Bug #39988



[Closed] oci_define_by_name column type is ignored



 



christopher.jones@... [2006-12-29 22:21:29]

2006-12-29T22:21:29+00:00

OCI8 related Bug
Reported by christopher.jones@...
2006-12-29T22:21:29+00:00
PHP: 5.2.0, OS: n/a

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.