]> granicus.if.org Git - php/commitdiff
MFB51: Fixed bug #36345 (PDO/MySQL problem loading BLOB over 1MB).
authorIlia Alshanetsky <iliaa@php.net>
Tue, 14 Feb 2006 14:26:27 +0000 (14:26 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Tue, 14 Feb 2006 14:26:27 +0000 (14:26 +0000)
ext/pdo_mysql/mysql_driver.c
ext/pdo_mysql/mysql_statement.c
ext/pdo_mysql/php_pdo_mysql_int.h

index 0cb13ea5336e1491707a9452ce7448320baf2b7a..3c7b0c5851639109344f7db22c5986cc6a4111e0 100755 (executable)
@@ -425,6 +425,8 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
 
                H->buffered = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_USE_BUFFERED_QUERY, 0 TSRMLS_CC);
 
+               H->max_buffer_size = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_MAX_BUFFER_SIZE, 1024 * 1024 TSRMLS_CC);
+
                if (mysql_options(H->server, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&connect_timeout)) {
                        pdo_mysql_error(dbh);
                        goto cleanup;
index 506af86950a96dce17eadd27cbe425729035d326..f0d2aa3b04b88200c1fc692c3225b5f3cd0558d8 100755 (executable)
@@ -71,8 +71,6 @@ static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
        return 1;
 }
 
-#define PDO_MYSQL_MAX_BUFFER 1024*1024 /* 1 megabyte */
-
 static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
 {
        pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
@@ -144,8 +142,8 @@ static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
                                                                S->fields[i].max_length? S->fields[i].max_length:
                                                                S->fields[i].length;
                                                        /* work-around for longtext and alike */
-                                                       if (S->bound_result[i].buffer_length > PDO_MYSQL_MAX_BUFFER) {
-                                                               S->bound_result[i].buffer_length = PDO_MYSQL_MAX_BUFFER;
+                                                       if (S->bound_result[i].buffer_length > H->max_buffer_size) {
+                                                               S->bound_result[i].buffer_length = H->max_buffer_size;
                                                        }
                                        }
                                        S->bound_result[i].buffer = emalloc(S->bound_result[i].buffer_length);
index 4fb06705203993633874c0caa1deb3b313c4ee13..85af4731dd4f5a42b1b84b4e7b4b55a35c6af747 100755 (executable)
@@ -38,6 +38,7 @@ typedef struct {
        unsigned attached:1;
        unsigned buffered:1;
        unsigned _reserved:31;
+       unsigned long max_buffer_size;
 
        pdo_mysql_error_info einfo;
 } pdo_mysql_db_handle;
@@ -82,5 +83,6 @@ enum {
        PDO_MYSQL_ATTR_INIT_COMMAND,
        PDO_MYSQL_ATTR_READ_DEFAULT_FILE,
        PDO_MYSQL_ATTR_READ_DEFAULT_GROUP,
+       PDO_MYSQL_ATTR_MAX_BUFFER_SIZE,
 };
 #endif