wez             Sun Oct 30 22:23:41 2005 EDT

  Modified files:              (Branch: PHP_5_1)
    /php-src/ext/pdo    pdo_stmt.c 
  Log:
  fix misinterpretation of data when overriding types via bindColumn.
  Very slightly modified patch from Marcus.
  
  
http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.118.2.13&r2=1.118.2.14&ty=u
Index: php-src/ext/pdo/pdo_stmt.c
diff -u php-src/ext/pdo/pdo_stmt.c:1.118.2.13 
php-src/ext/pdo/pdo_stmt.c:1.118.2.14
--- php-src/ext/pdo/pdo_stmt.c:1.118.2.13       Sun Oct 30 21:07:37 2005
+++ php-src/ext/pdo/pdo_stmt.c  Sun Oct 30 22:23:38 2005
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_stmt.c,v 1.118.2.13 2005/10/31 02:07:37 wez Exp $ */
+/* $Id: pdo_stmt.c,v 1.118.2.14 2005/10/31 03:23:38 wez Exp $ */
 
 /* The PDO Statement Handle Class */
 
@@ -443,10 +443,11 @@
        char *value = NULL;
        unsigned long value_len = 0;
        int caller_frees = 0;
-       int type;
+       int type, new_type;
 
        col = &stmt->columns[colno];
-       type = type_override ? PDO_PARAM_TYPE(*type_override) : 
PDO_PARAM_TYPE(col->param_type);
+       type = PDO_PARAM_TYPE(col->param_type);
+       new_type =  type_override ? PDO_PARAM_TYPE(*type_override) : type;
 
        value = NULL;
        value_len = 0;
@@ -474,7 +475,7 @@
                        if (value == NULL) {
                                ZVAL_NULL(dest);
                        } else if (value_len == 0) {
-                               if (stmt->dbh->stringify) {
+                               if (stmt->dbh->stringify || new_type == 
PDO_PARAM_STR) {
                                        char *buf = NULL;
                                        size_t len;
                                        len = 
php_stream_copy_to_mem((php_stream*)value, &buf, PHP_STREAM_COPY_ALL, 0);
@@ -483,7 +484,7 @@
                                } else {
                                        php_stream_to_zval((php_stream*)value, 
dest);
                                }
-                       } else if (!stmt->dbh->stringify) {
+                       } else if (!stmt->dbh->stringify && new_type != 
PDO_PARAM_STR) {
                                /* they gave us a string, but LOBs are 
represented as streams in PDO */
                                php_stream *stm;
 #ifdef TEMP_STREAM_TAKE_BUFFER
@@ -517,6 +518,25 @@
                        ZVAL_NULL(dest);
        }
 
+       if (type != new_type) {
+               switch (new_type) {
+                       case PDO_PARAM_INT:
+                               convert_to_long_ex(&dest);
+                               break;
+                       case PDO_PARAM_BOOL:
+                               convert_to_boolean_ex(&dest);
+                               break;
+                       case PDO_PARAM_STR:
+                               convert_to_string_ex(&dest);
+                               break;
+                       case PDO_PARAM_NULL:
+                               convert_to_null_ex(&dest);
+                               break;
+                       default:
+                               ;
+               }
+       }
+       
        if (caller_frees && value) {
                efree(value);
        }

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to