[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo_oci/tests bug46274.phpt bug46274_2.phpt /ext/pdo_pgsql pgsql_statement.c /ext/pdo_pgsql/tests bug46274_2.phpt
mbeccatiThu Apr 23 13:22:12 2009 UTC Added files: /php-src/ext/pdo_oci/tests bug46274.phpt bug46274_2.phpt Modified files: /php-src/ext/pdopdo_stmt.c /php-src/ext/pdo_pgsql pgsql_statement.c /php-src/ext/pdo_pgsql/testsbug46274_2.phpt Log: - Reverted previous fix for bug #46274 and properly fixed it - Fixed bug #48060 # Also added tests for pdo_oci as it's the only other driver currently # using streams: no regression found http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.221&r2=1.222&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.221 php-src/ext/pdo/pdo_stmt.c:1.222 --- php-src/ext/pdo/pdo_stmt.c:1.221Thu Apr 2 16:40:33 2009 +++ php-src/ext/pdo/pdo_stmt.c Thu Apr 23 13:22:12 2009 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.221 2009/04/02 16:40:33 mbeccati Exp $ */ +/* $Id: pdo_stmt.c,v 1.222 2009/04/23 13:22:12 mbeccati Exp $ */ /* The PDO Statement Handle Class */ @@ -583,6 +583,7 @@ if (value == NULL) { ZVAL_NULL(dest); } else if (value_len == 0) { + /* Warning, empty strings need to be passed as stream */ if (stmt->dbh->stringify || new_type == PDO_PARAM_STR) { char *buf = NULL; size_t len; http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_pgsql/pgsql_statement.c?r1=1.52&r2=1.53&diff_format=u Index: php-src/ext/pdo_pgsql/pgsql_statement.c diff -u php-src/ext/pdo_pgsql/pgsql_statement.c:1.52 php-src/ext/pdo_pgsql/pgsql_statement.c:1.53 --- php-src/ext/pdo_pgsql/pgsql_statement.c:1.52Sat Mar 28 03:01:38 2009 +++ php-src/ext/pdo_pgsql/pgsql_statement.c Thu Apr 23 13:22:12 2009 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pgsql_statement.c,v 1.52 2009/03/28 03:01:38 mbeccati Exp $ */ +/* $Id: pgsql_statement.c,v 1.53 2009/04/23 13:22:12 mbeccati Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -619,8 +619,14 @@ return 0; } else { *ptr = php_pdo_pgsql_unescape_bytea(*ptr, &tmp_len); - *len = tmp_len; - *caller_frees = 1; + if (!tmp_len) { + /* Empty string, return as empty stream */ + *ptr = (char *)php_stream_memory_open(TEMP_STREAM_READONLY, "", 0); + *len = 0; + } else { + *len = tmp_len; + *caller_frees = 1; + } } break; case PDO_PARAM_NULL: http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_pgsql/tests/bug46274_2.phpt?r1=1.2&r2=1.3&diff_format=u Index: php-src/ext/pdo_pgsql/tests/bug46274_2.phpt diff -u php-src/ext/pdo_pgsql/tests/bug46274_2.phpt:1.2 php-src/ext/pdo_pgsql/tests/bug46274_2.phpt:1.3 --- php-src/ext/pdo_pgsql/tests/bug46274_2.phpt:1.2 Sat Mar 28 02:34:02 2009 +++ php-src/ext/pdo_pgsql/tests/bug46274_2.phpt Thu Apr 23 13:22:12 2009 @@ -47,11 +47,13 @@ var_dump($x = $res->fetch()); var_dump(fread($x['blob1'], 10)); -// Empty string +// Resource var_dump($res->fetch()); +var_dump(fread($x['blob1'], 10)); -// Empty string +// Resource var_dump($res->fetch()); +var_dump(fread($x['blob1'], 10)); // NULL var_dump($res->fetch()); @@ -69,16 +71,18 @@ string(3) "foo" array(2) { ["blob1"]=> - string(0) "" + resource(%d) of type (stream) [0]=> - string(0) "" + resource(%d) of type (stream) } +string(0) "" array(2) { ["blob1"]=> - string(0) "" + resource(%d) of type (stream) [0]=> - string(0) "" + resource(%d) of type (stream) } +string(0) "" array(2) { ["blob1"]=> NULL http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_oci/tests/bug46274.phpt?view=markup&rev=1.1 Index: php-src/ext/pdo_oci/tests/bug46274.phpt +++ php-src/ext/pdo_oci/tests/bug46274.phpt --TEST-- Bug #46274 (pdo_pgsql - Segfault when using PDO::ATTR_STRINGIFY_FETCHES and blob) --SKIPIF-- --FILE-- setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); try { $db->exec("DROP TABLE test_one_blob"); } catch (Exception $e) { } $db->beginTransaction(); $db->query('CREATE TABLE test_one_blob (id INT NOT NULL, blob1 BLOB)'); $stmt = $db->prepare("INSERT INTO test_one_blob (id, blob1
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo_mysql/tests bug44327.phpt pdo_mysql_stmt_errorinfo.phpt pdo_mysql_stmt_multiquery.phpt
felipe Tue Mar 24 19:32:07 2009 UTC Modified files: /php-src/ext/pdopdo_stmt.c /php-src/ext/pdo_mysql/testsbug44327.phpt pdo_mysql_stmt_errorinfo.phpt pdo_mysql_stmt_multiquery.phpt Log: - Synced pieces of codes - Fixed tests http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.217&r2=1.218&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.217 php-src/ext/pdo/pdo_stmt.c:1.218 --- php-src/ext/pdo/pdo_stmt.c:1.217Mon Mar 23 23:02:06 2009 +++ php-src/ext/pdo/pdo_stmt.c Tue Mar 24 19:32:06 2009 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.217 2009/03/23 23:02:06 felipe Exp $ */ +/* $Id: pdo_stmt.c,v 1.218 2009/03/24 19:32:06 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -2650,6 +2650,7 @@ } } if (strcmp(Z_STRVAL_P(member), "queryString") == 0) { + zval_ptr_dtor(&return_value); return std_object_handlers.read_property(object, member, IS_STRING TSRMLS_CC); } } @@ -2694,28 +2695,18 @@ static HashTable *row_get_properties(zval *object TSRMLS_DC) { - zval *tmp; pdo_stmt_t * stmt = (pdo_stmt_t *) zend_object_store_get_object(object TSRMLS_CC); int i; - HashTable *ht; - - MAKE_STD_ZVAL(tmp); - array_init(tmp); for (i = 0; i < stmt->column_count; i++) { zval *val; MAKE_STD_ZVAL(val); fetch_value(stmt, val, i, NULL TSRMLS_CC); - add_assoc_zval(tmp, stmt->columns[i].name, val); + zend_hash_update(stmt->properties, stmt->columns[i].name, stmt->columns[i].namelen + 1, (void *)&val, sizeof(zval *), NULL); } - ht = Z_ARRVAL_P(tmp); - - ZVAL_NULL(tmp); - FREE_ZVAL(tmp); - - return ht; + return stmt->properties; } static union _zend_function *row_method_get( http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_mysql/tests/bug44327.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/pdo_mysql/tests/bug44327.phpt diff -u php-src/ext/pdo_mysql/tests/bug44327.phpt:1.1 php-src/ext/pdo_mysql/tests/bug44327.phpt:1.2 --- php-src/ext/pdo_mysql/tests/bug44327.phpt:1.1 Mon Nov 3 15:31:51 2008 +++ php-src/ext/pdo_mysql/tests/bug44327.phpt Tue Mar 24 19:32:06 2009 @@ -42,22 +42,22 @@ ?> --EXPECTF-- object(PDORow)#%d (2) { - ["queryString"]=> - string(17) "SELECT 1 AS "one"" - ["one"]=> + [u"queryString"]=> + unicode(17) "SELECT 1 AS "one"" + [u"one"]=> string(1) "1" } -string(1) "1" -string(1) "1" -string(17) "SELECT 1 AS "one"" +unicode(1) "1" +unicode(1) "1" +unicode(17) "SELECT 1 AS "one"" -- object(PDORow)#%d (2) { - ["queryString"]=> - string(19) "SELECT id FROM test" - ["id"]=> - string(1) "1" + [u"queryString"]=> + unicode(19) "SELECT id FROM test" + [u"id"]=> + unicode(1) "1" } -string(19) "SELECT id FROM test" +unicode(19) "SELECT id FROM test" -- Notice: Trying to get property of non-object in %s on line %d http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_mysql/tests/pdo_mysql_stmt_errorinfo.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/pdo_mysql/tests/pdo_mysql_stmt_errorinfo.phpt diff -u php-src/ext/pdo_mysql/tests/pdo_mysql_stmt_errorinfo.phpt:1.1 php-src/ext/pdo_mysql/tests/pdo_mysql_stmt_errorinfo.phpt:1.2 --- php-src/ext/pdo_mysql/tests/pdo_mysql_stmt_errorinfo.phpt:1.1 Mon Jul 21 13:05:51 2008 +++ php-src/ext/pdo_mysql/tests/pdo_mysql_stmt_errorinfo.phpt Tue Mar 24 19:32:06 2009 @@ -61,9 +61,13 @@ ?> --EXPECTF-- Testing emulated PS... -array(1) { +array(3) { [0]=> string(0) "" + [1]=> + NULL + [2]=> + NULL } Warning: PDOStatement::execute(): SQLSTATE[42S02]: Base table or view not found: 1146 Table '%s.ihopeitdoesnotexist' doesn't exist in %s on line %d @@ -86,17 +90,25 @@ [2]=> string(%d) "Table '%s.test' doesn't exist" } -array(1) { +array(3) { [0]=> string(5) "0" + [1]=> + NULL + [2]=> + NULL } Testing native PS... Warning: PDO::prepare(): SQLSTATE[42S02]: Base table or view not found: 1146 Table '%s.ihopeitdoesnotexist' doesn't exist in %s on line %d bool(false) -array(1) { +array(3) { [0]=> string(0) "" + [1]=> + NULL + [2]=> + NULL } Warning: PDOStatement::execute(): SQLSTATE[42S02]: Base table or view not found: 1146 Table '%s.test' doesn't exist in %s on line %d http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt diff -u php-src/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt:1.1 php-src/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo/tests bug_44409.phpt
felipe Mon Mar 23 23:02:06 2009 UTC Added files: /php-src/ext/pdo/tests bug_44409.phpt Modified files: /php-src/ext/pdopdo_stmt.c Log: - Fixed bug #44409 (PDO::FETCH_SERIALIZE calls __construct()) Patch by: matteo at beccati dot com http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.216&r2=1.217&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.216 php-src/ext/pdo/pdo_stmt.c:1.217 --- php-src/ext/pdo/pdo_stmt.c:1.216Thu Mar 12 16:12:44 2009 +++ php-src/ext/pdo/pdo_stmt.c Mon Mar 23 23:02:06 2009 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.216 2009/03/12 16:12:44 andrei Exp $ */ +/* $Id: pdo_stmt.c,v 1.217 2009/03/23 23:02:06 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -1239,7 +1239,7 @@ switch (how) { case PDO_FETCH_CLASS: - if (ce->constructor && !(flags & PDO_FETCH_PROPS_LATE)) { + if (ce->constructor && !(flags & (PDO_FETCH_PROPS_LATE | PDO_FETCH_SERIALIZE))) { stmt->fetch.cls.fci.object_ptr = return_value; stmt->fetch.cls.fcc.object_ptr = return_value; if (zend_call_function(&stmt->fetch.cls.fci, &stmt->fetch.cls.fcc TSRMLS_CC) == FAILURE) { http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/tests/bug_44409.phpt?view=markup&rev=1.1 Index: php-src/ext/pdo/tests/bug_44409.phpt +++ php-src/ext/pdo/tests/bug_44409.phpt --TEST-- PDO Common: Bug #44409 (PDO::FETCH_SERIALIZE calls __construct()) --SKIPIF-- --FILE-- exec("CREATE TABLE test (dat varchar(100))"); $db->exec("INSERT INTO test (dat) VALUES ('Data from DB')"); class bug44409 implements Serializable { public function __construct() { printf("Method called: %s()\n", __METHOD__); } public function serialize() { return "any data from serizalize()"; } public function unserialize($dat) { printf("Method called: %s(%s)\n", __METHOD__, var_export($dat, true)); } } $stmt = $db->query("SELECT * FROM test"); print_r($stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE, "bug44409")); ?> --EXPECT-- Method called: bug44409::unserialize('Data from DB') Array ( [0] => bug44409 Object ( ) ) -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
tony2001Wed Dec 3 10:11:04 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: fix possible invalid read http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.212&r2=1.213&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.212 php-src/ext/pdo/pdo_stmt.c:1.213 --- php-src/ext/pdo/pdo_stmt.c:1.212Thu Nov 27 19:02:44 2008 +++ php-src/ext/pdo/pdo_stmt.c Wed Dec 3 10:11:04 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.212 2008/11/27 19:02:44 dmitry Exp $ */ +/* $Id: pdo_stmt.c,v 1.213 2008/12/03 10:11:04 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -2202,11 +2202,15 @@ zstr str; uint len; ulong num; + int res; - if (zend_hash_get_current_key_ex(stmt->bound_params, &str, &len, &num, 0, &pos) == HASH_KEY_IS_LONG) { + res = zend_hash_get_current_key_ex(stmt->bound_params, &str, &len, &num, 0, &pos); + if (res == HASH_KEY_IS_LONG) { php_stream_printf(out TSRMLS_CC, "Key: Position #%ld:\n", num); - } else { - php_stream_printf(out TSRMLS_CC, "Key: Name: [%d] %.*s\n", len, len, str); + } else if (res == HASH_KEY_IS_STRING) { + php_stream_printf(out TSRMLS_CC, "Key: Name: [%d] %.*s\n", len, len, str.s); + } else if (res == HASH_KEY_IS_UNICODE) { + php_stream_printf(out TSRMLS_CC, "Key: Name: [%d] %.*r\n", len, len, str.u); } php_stream_printf(out TSRMLS_CC, "paramno=%d\nname=[%d] \"%.*s\"\nis_param=%d\nparam_type=%d\n", -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo_sqlite/tests debugdumpparams_001.phpt
felipe Wed Nov 5 23:39:09 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c /php-src/ext/pdo_sqlite/tests debugdumpparams_001.phpt Log: - Fixed wrong check - Improved test http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.207&r2=1.208&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.207 php-src/ext/pdo/pdo_stmt.c:1.208 --- php-src/ext/pdo/pdo_stmt.c:1.207Mon Nov 3 23:43:51 2008 +++ php-src/ext/pdo/pdo_stmt.c Wed Nov 5 23:39:09 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.207 2008/11/03 23:43:51 felipe Exp $ */ +/* $Id: pdo_stmt.c,v 1.208 2008/11/05 23:39:09 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -2200,14 +2200,14 @@ uint len; ulong num; - if (zend_hash_get_current_key_ex(stmt->bound_params, &str, &len, &num, 0, &pos) == HASH_KEY_IS_STRING) { - php_stream_printf(out TSRMLS_CC, "Key: Position #%d:\n", num); + if (zend_hash_get_current_key_ex(stmt->bound_params, &str, &len, &num, 0, &pos) == HASH_KEY_IS_LONG) { + php_stream_printf(out TSRMLS_CC, "Key: Position #%ld:\n", num); } else { php_stream_printf(out TSRMLS_CC, "Key: Name: [%d] %.*s\n", len, len, str); } - php_stream_printf(out TSRMLS_CC, "paramno=%d\nname=[%d] %.*s\nis_param=%d\nparam_type=%d\n", - param->paramno, param->namelen, param->namelen, param->name, + php_stream_printf(out TSRMLS_CC, "paramno=%d\nname=[%d] \"%.*s\"\nis_param=%d\nparam_type=%d\n", + param->paramno, param->namelen, param->namelen, param->name ? param->name : "", param->is_param, param->param_type); http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_sqlite/tests/debugdumpparams_001.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/pdo_sqlite/tests/debugdumpparams_001.phpt diff -u php-src/ext/pdo_sqlite/tests/debugdumpparams_001.phpt:1.1 php-src/ext/pdo_sqlite/tests/debugdumpparams_001.phpt:1.2 --- php-src/ext/pdo_sqlite/tests/debugdumpparams_001.phpt:1.1 Mon Nov 3 20:45:43 2008 +++ php-src/ext/pdo_sqlite/tests/debugdumpparams_001.phpt Wed Nov 5 23:39:09 2008 @@ -9,23 +9,29 @@ $db = new pdo('sqlite:memory'); -$x= $db->prepare('select :a, :b'); +$x= $db->prepare('select :a, :b, ?'); $x->bindValue(':a', 1, PDO::PARAM_INT); $x->bindValue(':b', 'foo'); +$x->bindValue(3, 1313); var_dump($x->debugDumpParams()); ?> --EXPECT-- -SQL: [13] select :a, :b -Params: 2 -Key: Position #0: +SQL: [16] select :a, :b, ? +Params: 3 +Key: Name: [2] :a paramno=-1 -name=[2] :a +name=[2] ":a" is_param=1 param_type=1 -Key: Position #0: +Key: Name: [2] :b paramno=-1 -name=[2] :b +name=[2] ":b" +is_param=1 +param_type=2 +Key: Position #2: +paramno=2 +name=[0] "" is_param=1 param_type=2 NULL -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo_sqlite/tests bug44327_3.phpt
felipe Mon Nov 3 23:43:51 2008 UTC Added files: /php-src/ext/pdo_sqlite/tests bug44327_3.phpt Modified files: /php-src/ext/pdopdo_stmt.c Log: - Improved fix http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.206&r2=1.207&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.206 php-src/ext/pdo/pdo_stmt.c:1.207 --- php-src/ext/pdo/pdo_stmt.c:1.206Mon Nov 3 20:45:43 2008 +++ php-src/ext/pdo/pdo_stmt.c Mon Nov 3 23:43:51 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.206 2008/11/03 20:45:43 felipe Exp $ */ +/* $Id: pdo_stmt.c,v 1.207 2008/11/03 23:43:51 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -2623,11 +2623,8 @@ pdo_stmt_t * stmt = (pdo_stmt_t *) zend_object_store_get_object(object TSRMLS_CC); int colno = -1; - if ((Z_TYPE_P(member) == IS_STRING || Z_TYPE_P(member) == IS_UNICODE) && - memcmp(Z_UNIVAL_P(member).v, "queryString", sizeof("queryString")-1)) { - return std_object_handlers.read_property(object, member, IS_STRING TSRMLS_CC); - } MAKE_STD_ZVAL(return_value); + RETVAL_NULL(); if (Z_TYPE_P(member) == IS_LONG) { if (Z_LVAL_P(member) >= 0 && Z_LVAL_P(member) < stmt->column_count) { @@ -2640,9 +2637,14 @@ for (colno = 0; colno < stmt->column_count; colno++) { if (strcmp(stmt->columns[colno].name, Z_STRVAL_P(member)) == 0) { fetch_value(stmt, return_value, colno, NULL TSRMLS_CC); - break; + Z_SET_REFCOUNT_P(return_value, 0); + Z_UNSET_ISREF_P(return_value); + return return_value; } } + if (strcmp(Z_STRVAL_P(member), "queryString") == 0) { + return std_object_handlers.read_property(object, member, IS_STRING TSRMLS_CC); + } } Z_SET_REFCOUNT_P(return_value, 0); http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_sqlite/tests/bug44327_3.phpt?view=markup&rev=1.1 Index: php-src/ext/pdo_sqlite/tests/bug44327_3.phpt +++ php-src/ext/pdo_sqlite/tests/bug44327_3.phpt --TEST-- Bug #44327.3 (PDORow::queryString property & numeric offsets / Crash) --SKIPIF-- --FILE-- query('select 1 as queryStringxx'); $y = $x->fetch(PDO::FETCH_LAZY); var_dump($y, $y->queryString, $y->queryStringzz, $y->queryStringxx); print "---\n"; var_dump($y[5], $y->{3}); ?> --EXPECTF-- object(PDORow)#%d (2) { ["queryString"]=> string(25) "select 1 as queryStringxx" ["queryStringxx"]=> string(1) "1" } string(25) "select 1 as queryStringxx" NULL string(1) "1" --- NULL NULL -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo_sqlite/tests debugdumpparams_001.phpt
felipe Mon Nov 3 20:45:43 2008 UTC Added files: /php-src/ext/pdo_sqlite/tests debugdumpparams_001.phpt Modified files: /php-src/ext/pdopdo_stmt.c Log: - Fixed endless loop in PDOStatement::debugDumpParams() patch by: Jonah H. Harris http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.205&r2=1.206&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.205 php-src/ext/pdo/pdo_stmt.c:1.206 --- php-src/ext/pdo/pdo_stmt.c:1.205Mon Nov 3 15:31:51 2008 +++ php-src/ext/pdo/pdo_stmt.c Mon Nov 3 20:45:43 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.205 2008/11/03 15:31:51 felipe Exp $ */ +/* $Id: pdo_stmt.c,v 1.206 2008/11/03 20:45:43 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -2211,6 +2211,7 @@ param->is_param, param->param_type); + zend_hash_move_forward_ex(stmt->bound_params, &pos); } } http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_sqlite/tests/debugdumpparams_001.phpt?view=markup&rev=1.1 Index: php-src/ext/pdo_sqlite/tests/debugdumpparams_001.phpt +++ php-src/ext/pdo_sqlite/tests/debugdumpparams_001.phpt --TEST-- Testing PDOStatement::debugDumpParams() with bound params --SKIPIF-- --FILE-- prepare('select :a, :b'); $x->bindValue(':a', 1, PDO::PARAM_INT); $x->bindValue(':b', 'foo'); var_dump($x->debugDumpParams()); ?> --EXPECT-- SQL: [13] select :a, :b Params: 2 Key: Position #0: paramno=-1 name=[2] :a is_param=1 param_type=1 Key: Position #0: paramno=-1 name=[2] :b is_param=1 param_type=2 NULL -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo_mysql/tests bug44327.phpt
felipe Mon Nov 3 15:31:51 2008 UTC Added files: /php-src/ext/pdo_mysql/testsbug44327.phpt Modified files: /php-src/ext/pdopdo_stmt.c Log: - Fixed bug #44327 (PDORow::queryString property & numeric offsets / Crash) http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.204&r2=1.205&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.204 php-src/ext/pdo/pdo_stmt.c:1.205 --- php-src/ext/pdo/pdo_stmt.c:1.204Sun Nov 2 21:10:10 2008 +++ php-src/ext/pdo/pdo_stmt.c Mon Nov 3 15:31:51 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.204 2008/11/02 21:10:10 felipe Exp $ */ +/* $Id: pdo_stmt.c,v 1.205 2008/11/03 15:31:51 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -2622,6 +2622,10 @@ pdo_stmt_t * stmt = (pdo_stmt_t *) zend_object_store_get_object(object TSRMLS_CC); int colno = -1; + if ((Z_TYPE_P(member) == IS_STRING || Z_TYPE_P(member) == IS_UNICODE) && + memcmp(Z_UNIVAL_P(member).v, "queryString", sizeof("queryString")-1)) { + return std_object_handlers.read_property(object, member, IS_STRING TSRMLS_CC); + } MAKE_STD_ZVAL(return_value); if (Z_TYPE_P(member) == IS_LONG) { http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_mysql/tests/bug44327.phpt?view=markup&rev=1.1 Index: php-src/ext/pdo_mysql/tests/bug44327.phpt +++ php-src/ext/pdo_mysql/tests/bug44327.phpt --TEST-- Bug #44327 (PDORow::queryString property & numeric offsets / Crash) --SKIPIF-- --FILE-- prepare("SELECT 1 AS \"one\""); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_LAZY); var_dump($row); var_dump($row->{0}); var_dump($row->one); var_dump($row->queryString); print "--\n"; @$db->exec("DROP TABLE test"); $db->exec("CREATE TABLE test (id INT)"); $db->exec("INSERT INTO test(id) VALUES (1)"); $stmt = $db->prepare("SELECT id FROM test"); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_LAZY); var_dump($row); var_dump($row->queryString); @$db->exec("DROP TABLE test"); print "--\n"; $stmt = $db->prepare('foo'); @$stmt->execute(); $row = $stmt->fetch(); var_dump($row->queryString); ?> --EXPECTF-- object(PDORow)#%d (2) { ["queryString"]=> string(17) "SELECT 1 AS "one"" ["one"]=> string(1) "1" } string(1) "1" string(1) "1" string(17) "SELECT 1 AS "one"" -- object(PDORow)#%d (2) { ["queryString"]=> string(19) "SELECT id FROM test" ["id"]=> string(1) "1" } string(19) "SELECT id FROM test" -- Notice: Trying to get property of non-object in %s on line %d NULL -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo_mysql/tests bug46292.phpt
felipe Tue Oct 14 17:34:11 2008 UTC Added files: /php-src/ext/pdo_mysql/testsbug46292.phpt Modified files: /php-src/ext/pdopdo_stmt.c Log: - Fixed bug #46292 (PDO::setFetchMode() shouldn't requires the 2nd arg when using FETCH_CLASSTYPE) http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.201&r2=1.202&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.201 php-src/ext/pdo/pdo_stmt.c:1.202 --- php-src/ext/pdo/pdo_stmt.c:1.201Fri Oct 10 19:35:15 2008 +++ php-src/ext/pdo/pdo_stmt.c Tue Oct 14 17:34:11 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.201 2008/10/10 19:35:15 felipe Exp $ */ +/* $Id: pdo_stmt.c,v 1.202 2008/10/14 17:34:11 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -1939,7 +1939,7 @@ int pdo_stmt_setup_fetch_mode(INTERNAL_FUNCTION_PARAMETERS, pdo_stmt_t *stmt, int skip) { long mode = PDO_FETCH_BOTH; - int argc = ZEND_NUM_ARGS() - skip; + int flags, argc = ZEND_NUM_ARGS() - skip; zval ***args; zend_class_entry **cep; @@ -1972,6 +1972,7 @@ convert_to_long_ex(args[skip]); mode = Z_LVAL_PP(args[skip]); + flags = mode & PDO_FETCH_FLAGS; if (!pdo_stmt_verify_mode(stmt, mode, 0 TSRMLS_CC)) { efree(args); @@ -1999,21 +2000,30 @@ break; case PDO_FETCH_CLASS: - if (argc < 2 || argc > 3) { - goto fail_out; - } - convert_to_string_ex(args[skip+1]); - - if (FAILURE == zend_lookup_class(Z_STRVAL_PP(args[skip+1]), - Z_STRLEN_PP(args[skip+1]), &cep TSRMLS_CC)) { - goto fail_out; - } + /* Gets its class name from 1st column */ + if ((flags & PDO_FETCH_CLASSTYPE) == PDO_FETCH_CLASSTYPE) { + if (argc != 1) { + goto fail_out; + } + stmt->fetch.cls.ce = NULL; + } else { + if (argc < 2 || argc > 3) { + goto fail_out; + } + convert_to_string_ex(args[skip+1]); - if (!cep || !*cep) { - goto fail_out; + if (FAILURE == zend_lookup_class(Z_STRVAL_PP(args[skip+1]), + Z_STRLEN_PP(args[skip+1]), &cep TSRMLS_CC)) { + goto fail_out; + } + + if (!cep || !*cep) { + goto fail_out; + } + + stmt->fetch.cls.ce = *cep; } - - stmt->fetch.cls.ce = *cep; + stmt->fetch.cls.ctor_args = NULL; #ifdef ilia_0 /* we'll only need this when we have persistent statements, if ever */ http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_mysql/tests/bug46292.phpt?view=markup&rev=1.1 Index: php-src/ext/pdo_mysql/tests/bug46292.phpt +++ php-src/ext/pdo_mysql/tests/bug46292.phpt --TEST-- Bug #46292 (PDO::setFetchMode() shouldn't requires the 2nd arg when using FETCH_CLASSTYPE) --FILE-- setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdoDb->query('DROP TABLE IF EXISTS testz'); $pdoDb->query('CREATE TABLE testz (name VARCHAR(20) NOT NULL, value INT)'); $pdoDb->query("INSERT INTO testz VALUES ('myclass', 1), ('myclass2', 2), ('myclass', NULL), ('myclass3', NULL)"); $stmt = $pdoDb->prepare("SELECT * FROM testz"); var_dump($stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE | PDO::FETCH_GROUP)); $stmt->execute(); var_dump($stmt->fetch()); var_dump($stmt->fetch()); var_dump($stmt->fetchAll()); $pdoDb->query('DROP TABLE IF EXISTS testz'); ?> --EXPECTF-- bool(true) myclass::__construct() object(myclass)#3 (1) { ["value"]=> string(1) "1" } myclass::__construct() object(myclass2)#3 (1) { ["value"]=> string(1) "2" } myclass::__construct() array(2) { [0]=> object(myclass)#3 (1) { ["value"]=> NULL } [1]=> object(stdClass)#4 (1) { ["value"]=> NULL } } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http:
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
felipe Fri Oct 10 19:35:16 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: - Static'fication http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.200&r2=1.201&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.200 php-src/ext/pdo/pdo_stmt.c:1.201 --- php-src/ext/pdo/pdo_stmt.c:1.200Fri Oct 10 16:46:10 2008 +++ php-src/ext/pdo/pdo_stmt.c Fri Oct 10 19:35:15 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.200 2008/10/10 16:46:10 felipe Exp $ */ +/* $Id: pdo_stmt.c,v 1.201 2008/10/10 19:35:15 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -38,31 +38,44 @@ #include "php_memory_streams.h" /* {{{ arginfo */ +static ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_execute, 0, 0, 0) ZEND_ARG_INFO(0, bound_input_params) /* array */ ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetch, 0, 0, 0) ZEND_ARG_INFO(0, how) ZEND_ARG_INFO(0, orientation) ZEND_ARG_INFO(0, offset) ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetchobject, 0, 0, 0) ZEND_ARG_INFO(0, class_name) ZEND_ARG_INFO(0, ctor_args) /* array */ ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetchcolumn, 0, 0, 0) ZEND_ARG_INFO(0, column_number) ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetchall, 0, 0, 0) ZEND_ARG_INFO(0, how) ZEND_ARG_INFO(0, class_name) ZEND_ARG_INFO(0, ctor_args) /* array */ ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_bindvalue, 0, 0, 2) ZEND_ARG_INFO(0, paramno) ZEND_ARG_INFO(0, param) ZEND_ARG_INFO(0, type) ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_bindparam, 0, 0, 2) ZEND_ARG_INFO(0, paramno) ZEND_ARG_INFO(1, param) @@ -70,6 +83,8 @@ ZEND_ARG_INFO(0, maxlen) ZEND_ARG_INFO(0, driverdata) ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_bindcolumn, 0, 0, 2) ZEND_ARG_INFO(0, column) ZEND_ARG_INFO(1, param) @@ -77,16 +92,24 @@ ZEND_ARG_INFO(0, maxlen) ZEND_ARG_INFO(0, driverdata) ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO(arginfo_pdostatement_setattribute, 0) ZEND_ARG_INFO(0, attribute) ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO(arginfo_pdostatement_getattribute, 0) ZEND_ARG_INFO(0, attribute) ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO(arginfo_pdostatement_getcolumnmeta, 0) ZEND_ARG_INFO(0, column) ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_setfetchmode, 0, 0, 1) ZEND_ARG_INFO(0, mode) ZEND_ARG_INFO(0, params) -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
felipe Fri Oct 10 16:46:10 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: - Fixed bug #46139 (PDOStatement->setFetchMode() forgets FETCH_PROPS_LATE) Initial patch by: chsc at peytz dot dk MFB: - Fixed bug #41971 (PDOStatement::fetch and PDOStatement::setFetchMode causes unexpected behavior) - Fixed bug #42917 (PDO::FETCH_KEY_PAIR doesn't work with setFetchMode) http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.199&r2=1.200&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.199 php-src/ext/pdo/pdo_stmt.c:1.200 --- php-src/ext/pdo/pdo_stmt.c:1.199Tue Sep 23 23:05:24 2008 +++ php-src/ext/pdo/pdo_stmt.c Fri Oct 10 16:46:10 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.199 2008/09/23 23:05:24 felipe Exp $ */ +/* $Id: pdo_stmt.c,v 1.200 2008/10/10 16:46:10 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -897,15 +897,16 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, enum pdo_fetch_type how, enum pdo_fetch_orientation ori, long offset, zval *return_all TSRMLS_DC) /* {{{ */ { - int flags = how & PDO_FETCH_FLAGS, idx, old_arg_count = 0; + int flags, idx, old_arg_count = 0; zend_class_entry *ce = NULL, *old_ce = NULL; zval grp_val, *grp, **pgrp, *retval, *old_ctor_args = NULL; int colno; - how = how & ~PDO_FETCH_FLAGS; if (how == PDO_FETCH_USE_DEFAULT) { how = stmt->default_fetch_type; } + flags = how & PDO_FETCH_FLAGS; + how = how & ~PDO_FETCH_FLAGS; if (!do_fetch_common(stmt, ori, offset, do_bind TSRMLS_CC)) { return 0; @@ -1489,7 +1490,7 @@ zval *arg2; zend_class_entry *old_ce; zval *old_ctor_args, *ctor_args = NULL; - int error = 0, old_arg_count; + int error = 0, flags, old_arg_count; PHP_STMT_GET_OBJ; if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lzz", &how, &arg2, &ctor_args)) { @@ -1581,20 +1582,25 @@ } } + flags = how & PDO_FETCH_FLAGS; + if ((how & ~PDO_FETCH_FLAGS) == PDO_FETCH_USE_DEFAULT) { + flags |= stmt->default_fetch_type & PDO_FETCH_FLAGS; how |= stmt->default_fetch_type & ~PDO_FETCH_FLAGS; } if (!error) { PDO_STMT_CLEAR_ERR(); MAKE_STD_ZVAL(data); - if (how & PDO_FETCH_GROUP) { + if ((how & PDO_FETCH_GROUP) || how == PDO_FETCH_KEY_PAIR || + (how == PDO_FETCH_USE_DEFAULT && stmt->default_fetch_type == PDO_FETCH_KEY_PAIR) + ) { array_init(return_value); return_all = return_value; } else { return_all = 0; } - if (!do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC)) { + if (!do_fetch(stmt, TRUE, data, how | flags, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC)) { FREE_ZVAL(data); error = 2; } @@ -1603,13 +1609,15 @@ if ((how & PDO_FETCH_GROUP)) { do { MAKE_STD_ZVAL(data); - } while (do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC)); + } while (do_fetch(stmt, TRUE, data, how | flags, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC)); + } else if (how == PDO_FETCH_KEY_PAIR || (how == PDO_FETCH_USE_DEFAULT && stmt->default_fetch_type == PDO_FETCH_KEY_PAIR)) { + while (do_fetch(stmt, TRUE, data, how | flags, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC)); } else { array_init(return_value); do { add_next_index_zval(return_value, data); MAKE_STD_ZVAL(data); - } while (do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, 0 TSRMLS_CC)); + } while (do_fetch(stmt, TRUE, data, how | flags, PDO_FETCH_ORI_NEXT, 0, 0 TSRMLS_CC)); } FREE_ZVAL(data); } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
felipe Tue Sep 23 23:05:24 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: - Fixed bug #46157 (PDOStatement::fetchObject prototype error) http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.198&r2=1.199&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.198 php-src/ext/pdo/pdo_stmt.c:1.199 --- php-src/ext/pdo/pdo_stmt.c:1.198Tue Aug 12 17:15:59 2008 +++ php-src/ext/pdo/pdo_stmt.c Tue Sep 23 23:05:24 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.198 2008/08/12 17:15:59 felipe Exp $ */ +/* $Id: pdo_stmt.c,v 1.199 2008/09/23 23:05:24 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -46,7 +46,7 @@ ZEND_ARG_INFO(0, orientation) ZEND_ARG_INFO(0, offset) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetchobject, 0, 0, 1) +ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetchobject, 0, 0, 0) ZEND_ARG_INFO(0, class_name) ZEND_ARG_INFO(0, ctor_args) /* array */ ZEND_END_ARG_INFO() @@ -1381,7 +1381,7 @@ } /* }}} */ -/* {{{ proto mixed PDOStatement::fetchObject(string class_name [, NULL|array ctor_args]) +/* {{{ proto mixed PDOStatement::fetchObject([string class_name [, NULL|array ctor_args]]) Fetches the next row and returns it as an object. */ static PHP_METHOD(PDOStatement, fetchObject) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/reflection php_reflection.c
dmitry Fri Jul 25 09:48:36 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c /php-src/ext/reflection php_reflection.c Log: Fixed support for static methods http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.195&r2=1.196&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.195 php-src/ext/pdo/pdo_stmt.c:1.196 --- php-src/ext/pdo/pdo_stmt.c:1.195Fri Jul 25 08:53:11 2008 +++ php-src/ext/pdo/pdo_stmt.c Fri Jul 25 09:48:36 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.195 2008/07/25 08:53:11 dmitry Exp $ */ +/* $Id: pdo_stmt.c,v 1.196 2008/07/25 09:48:36 dmitry Exp $ */ /* The PDO Statement Handle Class */ @@ -850,7 +850,7 @@ fcc->initialized = 1; fcc->function_handler = function_handler; fcc->calling_scope = EG(scope); - fcc->called_scope = Z_OBJCE_PP(object); + fcc->called_scope = object ? Z_OBJCE_PP(object) : NULL; fcc->object_pp = object; return 1; http://cvs.php.net/viewvc.cgi/php-src/ext/reflection/php_reflection.c?r1=1.302&r2=1.303&diff_format=u Index: php-src/ext/reflection/php_reflection.c diff -u php-src/ext/reflection/php_reflection.c:1.302 php-src/ext/reflection/php_reflection.c:1.303 --- php-src/ext/reflection/php_reflection.c:1.302 Fri Jul 25 08:53:11 2008 +++ php-src/ext/reflection/php_reflection.c Fri Jul 25 09:48:36 2008 @@ -20,7 +20,7 @@ +--+ */ -/* $Id: php_reflection.c,v 1.302 2008/07/25 08:53:11 dmitry Exp $ */ +/* $Id: php_reflection.c,v 1.303 2008/07/25 09:48:36 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -2434,7 +2434,7 @@ */ if (mptr->common.fn_flags & ZEND_ACC_STATIC) { object_pp = NULL; - obj_ce = NULL; + obj_ce = mptr->common.scope; } else { if ((Z_TYPE_PP(params[0]) != IS_OBJECT)) { efree(params); @@ -2465,7 +2465,7 @@ fcc.initialized = 1; fcc.function_handler = mptr; fcc.calling_scope = obj_ce; - fcc.called_scope = Z_OBJCE_PP(object_pp); + fcc.called_scope = obj_ce; fcc.object_pp = object_pp; result = zend_call_function(&fci, &fcc TSRMLS_CC); @@ -2538,7 +2538,7 @@ */ if (mptr->common.fn_flags & ZEND_ACC_STATIC) { object = NULL; - obj_ce = NULL; + obj_ce = mptr->common.scope; } else { if (!object) { efree(params); @@ -2570,8 +2570,8 @@ fcc.initialized = 1; fcc.function_handler = mptr; fcc.calling_scope = obj_ce; - fcc.called_scope = Z_OBJCE_P(object); - fcc.object_pp = &object; + fcc.called_scope = obj_ce; + fcc.object_pp = object ? &object : NULL; result = zend_call_function(&fci, &fcc TSRMLS_CC); @@ -5259,7 +5259,7 @@ php_info_print_table_start(); php_info_print_table_header(2, "Reflection", "enabled"); - php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 1.302 2008/07/25 08:53:11 dmitry Exp $"); + php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 1.303 2008/07/25 09:48:36 dmitry Exp $"); php_info_print_table_end(); } /* }}} */ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
felipe Sun Jul 6 05:02:41 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB: Added arginfo http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.192&r2=1.193&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.192 php-src/ext/pdo/pdo_stmt.c:1.193 --- php-src/ext/pdo/pdo_stmt.c:1.192Wed May 14 12:28:28 2008 +++ php-src/ext/pdo/pdo_stmt.c Sun Jul 6 05:02:40 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.192 2008/05/14 12:28:28 felipe Exp $ */ +/* $Id: pdo_stmt.c,v 1.193 2008/07/06 05:02:40 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -37,37 +37,61 @@ #include "zend_interfaces.h" #include "php_memory_streams.h" -#if COMPILE_DL_PDO -/* {{{ content from zend_arg_defs.c: - * since it is a .c file, it won't be installed for use by PECL extensions, so we include it here. */ -ZEND_BEGIN_ARG_INFO(first_arg_force_ref, 0) - ZEND_ARG_PASS_INFO(1) +/* {{{ arginfo */ +ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_execute, 0, 0, 0) + ZEND_ARG_INFO(0, bound_input_params) /* array */ ZEND_END_ARG_INFO() - - -ZEND_BEGIN_ARG_INFO(second_arg_force_ref, 0) - ZEND_ARG_PASS_INFO(0) - ZEND_ARG_PASS_INFO(1) +ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetch, 0, 0, 0) + ZEND_ARG_INFO(0, how) + ZEND_ARG_INFO(0, orientation) + ZEND_ARG_INFO(0, offset) ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(third_arg_force_ref, 0) - ZEND_ARG_PASS_INFO(0) - ZEND_ARG_PASS_INFO(0) - ZEND_ARG_PASS_INFO(1) +ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetchobject, 0, 0, 1) + ZEND_ARG_INFO(0, class_name) + ZEND_ARG_INFO(0, ctor_args) /* array */ ZEND_END_ARG_INFO() - - -ZEND_BEGIN_ARG_INFO(fourth_arg_force_ref, 0) - ZEND_ARG_PASS_INFO(0) - ZEND_ARG_PASS_INFO(0) - ZEND_ARG_PASS_INFO(0) - ZEND_ARG_PASS_INFO(1) +ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetchcolumn, 0, 0, 0) + ZEND_ARG_INFO(0, column_number) ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(all_args_by_ref, 1) +ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetchall, 0, 0, 0) + ZEND_ARG_INFO(0, how) + ZEND_ARG_INFO(0, class_name) + ZEND_ARG_INFO(0, ctor_args) /* array */ +ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_bindvalue, 0, 0, 2) + ZEND_ARG_INFO(0, paramno) + ZEND_ARG_INFO(0, param) + ZEND_ARG_INFO(0, type) +ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_bindparam, 0, 0, 2) + ZEND_ARG_INFO(0, paramno) + ZEND_ARG_INFO(1, param) + ZEND_ARG_INFO(0, type) + ZEND_ARG_INFO(0, maxlen) + ZEND_ARG_INFO(0, driverdata) +ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_bindcolumn, 0, 0, 2) + ZEND_ARG_INFO(0, column) + ZEND_ARG_INFO(1, param) + ZEND_ARG_INFO(0, type) + ZEND_ARG_INFO(0, maxlen) + ZEND_ARG_INFO(0, driverdata) +ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO(arginfo_pdostatement_setattribute, 0) + ZEND_ARG_INFO(0, attribute) + ZEND_ARG_INFO(0, value) +ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO(arginfo_pdostatement_getattribute, 0) + ZEND_ARG_INFO(0, attribute) +ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO(arginfo_pdostatement_getcolumnmeta, 0) + ZEND_ARG_INFO(0, column) +ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_setfetchmode, 0, 0, 1) + ZEND_ARG_INFO(0, mode) + ZEND_ARG_INFO(0, params) ZEND_END_ARG_INFO() /* }}} */ -#endif #define PHP_STMT_GET_OBJ \ pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC); \ @@ -2151,22 +2175,22 @@ /* }}} */ const zend_function_entry pdo_dbstmt_functions[] = { - PHP_ME(PDOStatement, execute, NULL, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, fetch, NULL, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, bindParam, second_arg_force_ref, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, bindColumn,second_arg_force_ref, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, bindValue, NULL, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, execute, arginfo_pdostatement_execute, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, fetch, arginfo_pdostatement_fetch, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, bindParam, arginfo_pdostatement_bindparam, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, bindColumn, arginfo_pdostatement_bindcolumn,ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, bindValue, arginfo_pdostatement_bindvalue, ZEND_ACC_PUBLIC) PHP_ME(PDOStatement, rowCount, NULL, ZEND_ACC_PUBLIC) - PHP_ME(PDOSta
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo/tests pdorow.phpt
felipe Wed May 14 12:28:28 2008 UTC Added files: /php-src/ext/pdo/tests pdorow.phpt Modified files: /php-src/ext/pdopdo_stmt.c Log: - Add check for avoid segfault when trying instantiate PDORow manually http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.191&r2=1.192&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.191 php-src/ext/pdo/pdo_stmt.c:1.192 --- php-src/ext/pdo/pdo_stmt.c:1.191Sat Mar 22 19:29:43 2008 +++ php-src/ext/pdo/pdo_stmt.c Wed May 14 12:28:28 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.191 2008/03/22 19:29:43 felipe Exp $ */ +/* $Id: pdo_stmt.c,v 1.192 2008/05/14 12:28:28 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -2714,10 +2714,12 @@ void pdo_row_free_storage(pdo_stmt_t *stmt TSRMLS_DC) { - ZVAL_NULL(&stmt->lazy_object_ref); - - if (--stmt->refcount == 0) { - free_statement(stmt TSRMLS_CC); + if (stmt) { + ZVAL_NULL(&stmt->lazy_object_ref); + + if (--stmt->refcount == 0) { + free_statement(stmt TSRMLS_CC); + } } } http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/tests/pdorow.phpt?view=markup&rev=1.1 Index: php-src/ext/pdo/tests/pdorow.phpt +++ php-src/ext/pdo/tests/pdorow.phpt --TEST-- Trying instantiate a PDORow object manually --FILE-- --EXPECTF-- Fatal error: PDORow::__construct(): You should not create a PDOStatement manually in %s on line %d -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
felipe Sat Mar 22 19:29:43 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: Fixed compilation warnings http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.190&r2=1.191&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.190 php-src/ext/pdo/pdo_stmt.c:1.191 --- php-src/ext/pdo/pdo_stmt.c:1.190Tue Mar 4 23:39:15 2008 +++ php-src/ext/pdo/pdo_stmt.c Sat Mar 22 19:29:43 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.190 2008/03/04 23:39:15 felipe Exp $ */ +/* $Id: pdo_stmt.c,v 1.191 2008/03/22 19:29:43 felipe Exp $ */ /* The PDO Statement Handle Class */ @@ -537,7 +537,7 @@ 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); + len = php_stream_copy_to_mem((php_stream*)value, (void *)&buf, PHP_STREAM_COPY_ALL, 0); if(buf == NULL) { ZVAL_EMPTY_STRING(dest); } else { @@ -2672,12 +2672,12 @@ return pdo_dbstmt_ce; } -static int row_get_classname(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC) +static int row_get_classname(zval *object, zstr *class_name, zend_uint *class_name_len, int parent TSRMLS_DC) { if (parent) { return FAILURE; } else { - *class_name = UG(unicode) ? USTR_MAKE("PDORow") : estrndup("PDORow", sizeof("PDORow")-1); + *class_name = ezstrndup(ZEND_STR_TYPE, ZSTR("PDORow"), sizeof("PDORow") - 1); *class_name_len = sizeof("PDORow")-1; return SUCCESS; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo/tests pdo_035.phpt
johannesMon Mar 3 18:58:59 2008 UTC Added files: /php-src/ext/pdo/tests pdo_035.phpt Modified files: /php-src/ext/pdopdo_stmt.c Log: - Fix get_parent_class() of PDORow instances http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.188&r2=1.189&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.188 php-src/ext/pdo/pdo_stmt.c:1.189 --- php-src/ext/pdo/pdo_stmt.c:1.188Tue Feb 26 00:14:25 2008 +++ php-src/ext/pdo/pdo_stmt.c Mon Mar 3 18:58:59 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.188 2008/02/26 00:14:25 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.189 2008/03/03 18:58:59 johannes Exp $ */ /* The PDO Statement Handle Class */ @@ -2674,9 +2674,13 @@ static int row_get_classname(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC) { - *class_name = estrndup("PDORow", sizeof("PDORow")-1); - *class_name_len = sizeof("PDORow")-1; - return 0; + if (parent) { + return FAILURE; + } else { + *class_name = UG(unicode) ? USTR_MAKE("PDORow") : estrndup("PDORow", sizeof("PDORow")-1); + *class_name_len = sizeof("PDORow")-1; + return SUCCESS; + } } static int row_compare(zval *object1, zval *object2 TSRMLS_DC) http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/tests/pdo_035.phpt?view=markup&rev=1.1 Index: php-src/ext/pdo/tests/pdo_035.phpt +++ php-src/ext/pdo/tests/pdo_035.phpt --TEST-- PDO Common: PDORow and get_parent_class() --SKIPIF-- --FILE-- exec('CREATE TABLE test (id int)'); $db->exec('INSERT INTO test VALUES (23)'); $stmt = $db->prepare('SELECT id FROM test'); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_LAZY); echo get_class($result), "\n"; var_dump(get_parent_class($result)); ?> --EXPECT-- PDORow bool(false) -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo_pgsql pgsql_statement.c
iliaa Tue Feb 26 00:14:25 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c /php-src/ext/pdo_pgsql pgsql_statement.c Log: MFB: Better fix for bug #44189 http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.187&r2=1.188&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.187 php-src/ext/pdo/pdo_stmt.c:1.188 --- php-src/ext/pdo/pdo_stmt.c:1.187Sun Feb 24 16:09:13 2008 +++ php-src/ext/pdo/pdo_stmt.c Tue Feb 26 00:14:25 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.187 2008/02/24 16:09:13 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.188 2008/02/26 00:14:25 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -142,10 +142,6 @@ ht = stmt->bound_params; - if (ht && !stmt->bound_param_map) { - return 0; - } - iterate: if (ht) { zend_hash_internal_pointer_reset(ht); http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_pgsql/pgsql_statement.c?r1=1.46&r2=1.47&diff_format=u Index: php-src/ext/pdo_pgsql/pgsql_statement.c diff -u php-src/ext/pdo_pgsql/pgsql_statement.c:1.46 php-src/ext/pdo_pgsql/pgsql_statement.c:1.47 --- php-src/ext/pdo_pgsql/pgsql_statement.c:1.46Mon Dec 31 07:12:13 2007 +++ php-src/ext/pdo_pgsql/pgsql_statement.c Tue Feb 26 00:14:25 2008 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: pgsql_statement.c,v 1.46 2007/12/31 07:12:13 sebastian Exp $ */ +/* $Id: pgsql_statement.c,v 1.47 2008/02/26 00:14:25 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -183,6 +183,9 @@ break; case PDO_PARAM_EVT_EXEC_PRE: + if (!stmt->bound_param_map) { + return 0; + } if (!S->param_values) { S->param_values = ecalloc( zend_hash_num_elements(stmt->bound_param_map), -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
That seems strange, I'll take a look tonight. On 25-Feb-08, at 3:20 AM, Antony Dovgal wrote: On 24.02.2008 19:09, Ilia Alshanetsky wrote: iliaa Sun Feb 24 16:09:13 2008 UTC Modified files: /php-src/ext/pdo pdo_stmt.c Log: MFB: Fixed bug #44200 (A crash in PDO when no bound targets exists and yet bound parameters are present) The tests below are failing after this commit. /local/qa/5_3/ext/pdo_mysql/tests/bug_39483.phpt # /local/qa/5_3/ext/pdo_mysql/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/bug_36798.phpt # /local/qa/5_3/ext/pdo_mysql/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/bug_39656.phpt # /local/qa/5_3/ext/pdo_mysql/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_016.phpt # /local/qa/5_3/ext/pdo_mysql/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_016a.phpt # /local/qa/5_3/ext/pdo_mysql/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_018.phpt # /local/qa/5_3/ext/pdo_mysql/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_024.phpt /local/qa/5_3/ext/pdo_mysql/tests/pecl_bug_5780.phpt /local/qa/5_3/ext/pdo_mysql/tests/pecl_bug_5802.phpt /local/qa/5_3/ext/pdo_sqlite/tests/bug33841.phpt /local/qa/5_3/ext/pdo_sqlite/tests/bug35336.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/bug_34630.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/bug_35671.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/bug_36798.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/bug_38394.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/bug_39398.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/bug_39656.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_016.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_016a.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_018.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_021.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_024.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_025.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_026.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_028.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_029.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_030.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_031.phpt # /local/qa/5_3/ext/sqlite/tests/pdo/common.phpt: /local/qa/5_3/ext/ pdo/tests/bug_36798.phpt # /local/qa/5_3/ext/sqlite/tests/pdo/common.phpt: /local/qa/5_3/ext/ pdo/tests/bug_39656.phpt # /local/qa/5_3/ext/sqlite/tests/pdo/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_016.phpt # /local/qa/5_3/ext/sqlite/tests/pdo/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_016a.phpt # /local/qa/5_3/ext/sqlite/tests/pdo/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_018.phpt # /local/qa/5_3/ext/sqlite/tests/pdo/common.phpt: /local/qa/5_3/ext/ pdo/tests/pdo_024.phpt -- Wbr, Antony Dovgal -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php Ilia Alshanetsky -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
On 24.02.2008 19:09, Ilia Alshanetsky wrote: > iliaa Sun Feb 24 16:09:13 2008 UTC > > Modified files: > /php-src/ext/pdo pdo_stmt.c > Log: > > MFB: Fixed bug #44200 (A crash in PDO when no bound targets exists and yet > bound parameters are present) The tests below are failing after this commit. /local/qa/5_3/ext/pdo_mysql/tests/bug_39483.phpt # /local/qa/5_3/ext/pdo_mysql/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/bug_36798.phpt # /local/qa/5_3/ext/pdo_mysql/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/bug_39656.phpt # /local/qa/5_3/ext/pdo_mysql/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_016.phpt # /local/qa/5_3/ext/pdo_mysql/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_016a.phpt # /local/qa/5_3/ext/pdo_mysql/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_018.phpt # /local/qa/5_3/ext/pdo_mysql/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_024.phpt /local/qa/5_3/ext/pdo_mysql/tests/pecl_bug_5780.phpt /local/qa/5_3/ext/pdo_mysql/tests/pecl_bug_5802.phpt /local/qa/5_3/ext/pdo_sqlite/tests/bug33841.phpt /local/qa/5_3/ext/pdo_sqlite/tests/bug35336.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/bug_34630.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/bug_35671.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/bug_36798.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/bug_38394.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/bug_39398.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/bug_39656.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_016.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_016a.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_018.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_021.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_024.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_025.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_026.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_028.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_029.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_030.phpt # /local/qa/5_3/ext/pdo_sqlite/tests/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_031.phpt # /local/qa/5_3/ext/sqlite/tests/pdo/common.phpt: /local/qa/5_3/ext/pdo/tests/bug_36798.phpt # /local/qa/5_3/ext/sqlite/tests/pdo/common.phpt: /local/qa/5_3/ext/pdo/tests/bug_39656.phpt # /local/qa/5_3/ext/sqlite/tests/pdo/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_016.phpt # /local/qa/5_3/ext/sqlite/tests/pdo/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_016a.phpt # /local/qa/5_3/ext/sqlite/tests/pdo/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_018.phpt # /local/qa/5_3/ext/sqlite/tests/pdo/common.phpt: /local/qa/5_3/ext/pdo/tests/pdo_024.phpt -- Wbr, Antony Dovgal -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Sun Feb 24 16:09:13 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB: Fixed bug #44200 (A crash in PDO when no bound targets exists and yet bound parameters are present) http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.186&r2=1.187&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.186 php-src/ext/pdo/pdo_stmt.c:1.187 --- php-src/ext/pdo/pdo_stmt.c:1.186Wed Feb 20 03:12:23 2008 +++ php-src/ext/pdo/pdo_stmt.c Sun Feb 24 16:09:13 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.186 2008/02/20 03:12:23 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.187 2008/02/24 16:09:13 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -142,6 +142,10 @@ ht = stmt->bound_params; + if (ht && !stmt->bound_param_map) { + return 0; + } + iterate: if (ht) { zend_hash_internal_pointer_reset(ht); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Wed Feb 20 03:12:23 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB: Fixed bug #44171 (Invalid FETCH_COLUMN index does not raise an error) http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.185&r2=1.186&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.185 php-src/ext/pdo/pdo_stmt.c:1.186 --- php-src/ext/pdo/pdo_stmt.c:1.185Mon Jan 14 18:41:48 2008 +++ php-src/ext/pdo/pdo_stmt.c Wed Feb 20 03:12:23 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.185 2008/01/14 18:41:48 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.186 2008/02/20 03:12:23 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -936,6 +936,8 @@ } else { break; } + } else { + pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "Invalid column index" TSRMLS_CC); } return 0; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Mon Jan 14 18:41:48 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB: Missing patch bit from the FETCH_GROUP fix http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.184&r2=1.185&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.184 php-src/ext/pdo/pdo_stmt.c:1.185 --- php-src/ext/pdo/pdo_stmt.c:1.184Fri Jan 11 01:48:19 2008 +++ php-src/ext/pdo/pdo_stmt.c Mon Jan 14 18:41:48 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.184 2008/01/11 01:48:19 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.185 2008/01/14 18:41:48 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -926,6 +926,8 @@ if (colno >= 0 && colno < stmt->column_count) { if (flags == PDO_FETCH_GROUP && stmt->fetch.column == -1) { fetch_value(stmt, return_value, 1, NULL TSRMLS_CC); + } else if (flags == PDO_FETCH_GROUP && colno) { + fetch_value(stmt, return_value, 0, NULL TSRMLS_CC); } else { fetch_value(stmt, return_value, colno, NULL TSRMLS_CC); } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Fri Jan 11 01:48:19 2008 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB: Fixed a bug with PDO::FETCH_COLUMN|PDO::FETCH_GROUP mode when a column # by which to group by data is specified. http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.183&r2=1.184&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.183 php-src/ext/pdo/pdo_stmt.c:1.184 --- php-src/ext/pdo/pdo_stmt.c:1.183Mon Dec 31 07:12:13 2007 +++ php-src/ext/pdo/pdo_stmt.c Fri Jan 11 01:48:19 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.183 2007/12/31 07:12:13 sebastian Exp $ */ +/* $Id: pdo_stmt.c,v 1.184 2008/01/11 01:48:19 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -860,6 +860,7 @@ int flags = how & PDO_FETCH_FLAGS, idx, old_arg_count = 0; zend_class_entry *ce = NULL, *old_ce = NULL; zval grp_val, *grp, **pgrp, *retval, *old_ctor_args = NULL; + int colno; how = how & ~PDO_FETCH_FLAGS; if (how == PDO_FETCH_USE_DEFAULT) { @@ -875,6 +876,12 @@ return 1; } + if (flags & PDO_FETCH_GROUP && stmt->fetch.column == -1) { + colno = 1; + } else { + colno = stmt->fetch.column; + } + if (return_value) { int i = 0; @@ -916,8 +923,12 @@ break; case PDO_FETCH_COLUMN: - if (stmt->fetch.column >= 0 && stmt->fetch.column < stmt->column_count) { - fetch_value(stmt, return_value, stmt->fetch.column, NULL TSRMLS_CC); + if (colno >= 0 && colno < stmt->column_count) { + if (flags == PDO_FETCH_GROUP && stmt->fetch.column == -1) { + fetch_value(stmt, return_value, 1, NULL TSRMLS_CC); + } else { + fetch_value(stmt, return_value, colno, NULL TSRMLS_CC); + } if (!return_all) { return 1; } else { @@ -1020,7 +1031,11 @@ if (return_all) { INIT_PZVAL(&grp_val); - fetch_value(stmt, &grp_val, i, NULL TSRMLS_CC); + if (flags == PDO_FETCH_GROUP && how == PDO_FETCH_COLUMN && stmt->fetch.column > 0) { + fetch_value(stmt, &grp_val, colno, NULL TSRMLS_CC); + } else { + fetch_value(stmt, &grp_val, i, NULL TSRMLS_CC); + } convert_to_string(&grp_val); if (how == PDO_FETCH_COLUMN) { i = stmt->column_count; /* no more data to fetch */ @@ -1503,7 +1518,7 @@ switch(ZEND_NUM_ARGS()) { case 0: case 1: - stmt->fetch.column = how & PDO_FETCH_GROUP ? 1 : 0; + stmt->fetch.column = how & PDO_FETCH_GROUP ? -1 : 0; break; case 2: convert_to_long(arg2); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Tue Nov 20 23:27:56 2007 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: revert previous pdo patch http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.181&r2=1.182&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.181 php-src/ext/pdo/pdo_stmt.c:1.182 --- php-src/ext/pdo/pdo_stmt.c:1.181Tue Nov 20 14:22:40 2007 +++ php-src/ext/pdo/pdo_stmt.c Tue Nov 20 23:27:56 2007 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.181 2007/11/20 14:22:40 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.182 2007/11/20 23:27:56 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -144,11 +144,6 @@ iterate: if (ht) { - if (zend_hash_num_elements(stmt->bound_param_map) != zend_hash_num_elements(ht)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of bound paramters %d does not match number of bound values %d", zend_hash_num_elements(stmt->bound_param_map), zend_hash_num_elements(ht)); - return 0; - } - zend_hash_internal_pointer_reset(ht); while (SUCCESS == zend_hash_get_current_data(ht, (void**)¶m)) { if (!stmt->methods->param_hook(stmt, param, event_type TSRMLS_CC)) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Tue Nov 20 14:22:40 2007 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB: Fixed bug #42978 (mismatch between number of bound params and values causes a crash in pdo_pgsql) http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.180&r2=1.181&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.180 php-src/ext/pdo/pdo_stmt.c:1.181 --- php-src/ext/pdo/pdo_stmt.c:1.180Wed Oct 31 12:58:39 2007 +++ php-src/ext/pdo/pdo_stmt.c Tue Nov 20 14:22:40 2007 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.180 2007/10/31 12:58:39 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.181 2007/11/20 14:22:40 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -144,6 +144,11 @@ iterate: if (ht) { + if (zend_hash_num_elements(stmt->bound_param_map) != zend_hash_num_elements(ht)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of bound paramters %d does not match number of bound values %d", zend_hash_num_elements(stmt->bound_param_map), zend_hash_num_elements(ht)); + return 0; + } + zend_hash_internal_pointer_reset(ht); while (SUCCESS == zend_hash_get_current_data(ht, (void**)¶m)) { if (!stmt->methods->param_hook(stmt, param, event_type TSRMLS_CC)) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo/tests bug_43139.phpt
iliaa Wed Oct 31 12:58:39 2007 UTC Modified files: /php-src/ext/pdo/tests bug_43139.phpt /php-src/ext/pdopdo_stmt.c Log: MFB: Fixed bug #43139 PDO ignores ATTR_DEFAULT_FETCH_MODE in some cases with fetchAll() http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/tests/bug_43139.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/pdo/tests/bug_43139.phpt diff -u /dev/null php-src/ext/pdo/tests/bug_43139.phpt:1.2 --- /dev/null Wed Oct 31 12:58:39 2007 +++ php-src/ext/pdo/tests/bug_43139.phptWed Oct 31 12:58:39 2007 @@ -0,0 +1,34 @@ +--TEST-- +PDO Common: Bug #43139 (PDO ignore ATTR_DEFAULT_FETCH_MODE in some cases with fetchAll()) +--SKIPIF-- + +--FILE-- +setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); +$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); + +var_dump($db->query('select 0 as abc, 1 as xyz, 2 as def')->fetchAll(PDO::FETCH_GROUP)); +?> +--EXPECT-- +array(1) { + [0]=> + array(1) { +[0]=> +array(2) { + ["xyz"]=> + string(1) "1" + ["def"]=> + string(1) "2" +} + } +} http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.179&r2=1.180&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.179 php-src/ext/pdo/pdo_stmt.c:1.180 --- php-src/ext/pdo/pdo_stmt.c:1.179Mon Oct 8 04:05:22 2007 +++ php-src/ext/pdo/pdo_stmt.c Wed Oct 31 12:58:39 2007 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.179 2007/10/08 04:05:22 davidw Exp $ */ +/* $Id: pdo_stmt.c,v 1.180 2007/10/31 12:58:39 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -1236,7 +1236,7 @@ } /* }}} */ -static int pdo_stmt_verify_mode(pdo_stmt_t *stmt, int mode, int fetch_all TSRMLS_DC) /* {{{ */ +static int pdo_stmt_verify_mode(pdo_stmt_t *stmt, long mode, int fetch_all TSRMLS_DC) /* {{{ */ { int flags = mode & PDO_FETCH_FLAGS; @@ -1522,6 +1522,10 @@ } } + if ((how & ~PDO_FETCH_FLAGS) == PDO_FETCH_USE_DEFAULT) { + how |= stmt->default_fetch_type & ~PDO_FETCH_FLAGS; + } + if (!error) { PDO_STMT_CLEAR_ERR(); MAKE_STD_ZVAL(data); @@ -1890,6 +1894,7 @@ case PDO_FETCH_OBJ: case PDO_FETCH_BOUND: case PDO_FETCH_NAMED: + case PDO_FETCH_KEY_PAIR: break; case PDO_FETCH_COLUMN: -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
davidw Mon Oct 8 04:05:22 2007 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: stmt->fetch.func.values is not a zval and should not be freed with FREE_ZVAL http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.178&r2=1.179&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.178 php-src/ext/pdo/pdo_stmt.c:1.179 --- php-src/ext/pdo/pdo_stmt.c:1.178Sun Oct 7 05:15:04 2007 +++ php-src/ext/pdo/pdo_stmt.c Mon Oct 8 04:05:22 2007 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.178 2007/10/07 05:15:04 davidw Exp $ */ +/* $Id: pdo_stmt.c,v 1.179 2007/10/08 04:05:22 davidw Exp $ */ /* The PDO Statement Handle Class */ @@ -845,7 +845,7 @@ stmt->fetch.cls.fci.param_count = 0; } if (stmt->fetch.func.values) { - FREE_ZVAL(stmt->fetch.func.values); + efree(stmt->fetch.func.values); stmt->fetch.func.values = NULL; } return 1; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
stasWed Sep 12 21:27:57 2007 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB: fix crash if stream is empty and reader function sets buffer as null http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.175&r2=1.176&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.175 php-src/ext/pdo/pdo_stmt.c:1.176 --- php-src/ext/pdo/pdo_stmt.c:1.175Wed May 16 20:12:53 2007 +++ php-src/ext/pdo/pdo_stmt.c Wed Sep 12 21:27:56 2007 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.175 2007/05/16 20:12:53 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.176 2007/09/12 21:27:56 stas Exp $ */ /* The PDO Statement Handle Class */ @@ -538,7 +538,11 @@ char *buf = NULL; size_t len; len = php_stream_copy_to_mem((php_stream*)value, &buf, PHP_STREAM_COPY_ALL, 0); - ZVAL_STRINGL(dest, buf, len, 0); + if(buf == NULL) { + ZVAL_EMPTY_STRING(dest); + } else { + ZVAL_STRINGL(dest, buf, len, 0); + } php_stream_close((php_stream*)value); } else { php_stream_to_zval((php_stream*)value, dest); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Wed May 16 20:12:53 2007 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: Fixed a typo http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.174&r2=1.175&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.174 php-src/ext/pdo/pdo_stmt.c:1.175 --- php-src/ext/pdo/pdo_stmt.c:1.174Wed May 16 19:58:58 2007 +++ php-src/ext/pdo/pdo_stmt.c Wed May 16 20:12:53 2007 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.174 2007/05/16 19:58:58 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.175 2007/05/16 20:12:53 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -1043,7 +1043,7 @@ if (Z_TYPE_P(val) == IS_STRING) { zend_symtable_update(Z_ARRVAL_P(return_value), Z_STRVAL_P(val), Z_STRLEN_P(val) + 1, &tmp, sizeof(zval *), NULL); - } else if (Z_TYPE_P(val) = IS_LONG) { + } else if (Z_TYPE_P(val) == IS_LONG) { zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_P(val), tmp, sizeof(tmp), NULL); } else { convert_to_string(val); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
tony2001Wed Mar 7 09:02:18 2007 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: fix #40727 (segfault in PDO when failed to bind parameters) http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.172&r2=1.173&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.172 php-src/ext/pdo/pdo_stmt.c:1.173 --- php-src/ext/pdo/pdo_stmt.c:1.172Mon Jan 1 09:29:27 2007 +++ php-src/ext/pdo/pdo_stmt.c Wed Mar 7 09:02:18 2007 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.172 2007/01/01 09:29:27 sebastian Exp $ */ +/* $Id: pdo_stmt.c,v 1.173 2007/03/07 09:02:18 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -251,7 +251,10 @@ efree(param->name); } - zval_ptr_dtor(&(param->parameter)); + if (param->parameter) { + zval_ptr_dtor(&(param->parameter)); + param->parameter = NULL; + } if (param->driver_params) { zval_ptr_dtor(&(param->driver_params)); } @@ -1556,7 +1559,10 @@ ZVAL_ADDREF(param.parameter); if (!really_register_bound_param(¶m, stmt, is_param TSRMLS_CC)) { - zval_ptr_dtor(&(param.parameter)); + if (param.parameter) { + zval_ptr_dtor(&(param.parameter)); + param.parameter = NULL; + } return 0; } return 1; @@ -1589,7 +1595,10 @@ ZVAL_ADDREF(param.parameter); if (!really_register_bound_param(¶m, stmt, TRUE TSRMLS_CC)) { - zval_ptr_dtor(&(param.parameter)); + if (param.parameter) { + zval_ptr_dtor(&(param.parameter)); + param.parameter = NULL; + } RETURN_FALSE; } RETURN_TRUE; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo_mysql mysql_statement.c
iliaa Fri Dec 8 19:51:29 2006 UTC Modified files: /php-src/ext/pdo_mysql mysql_statement.c /php-src/ext/pdopdo_stmt.c Log: MFB: Fixed bug #39759 (Can't use stored procedures fetching multiple result sets in pdo_mysql). http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_mysql/mysql_statement.c?r1=1.57&r2=1.58&diff_format=u Index: php-src/ext/pdo_mysql/mysql_statement.c diff -u php-src/ext/pdo_mysql/mysql_statement.c:1.57 php-src/ext/pdo_mysql/mysql_statement.c:1.58 --- php-src/ext/pdo_mysql/mysql_statement.c:1.57Sat Dec 2 17:55:05 2006 +++ php-src/ext/pdo_mysql/mysql_statement.c Fri Dec 8 19:51:29 2006 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: mysql_statement.c,v 1.57 2006/12/02 17:55:05 iliaa Exp $ */ +/* $Id: mysql_statement.c,v 1.58 2006/12/08 19:51:29 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -239,15 +239,15 @@ /* No more results */ return 0; } else { - if ((my_ulonglong)-1 == (row_count = mysql_affected_rows(H->server))) { - pdo_mysql_error_stmt(stmt); - return 0; - } - if (!H->buffered) { S->result = mysql_use_result(H->server); + row_count = 0; } else { S->result = mysql_store_result(H->server); + if ((my_ulonglong)-1 == (row_count = mysql_affected_rows(H->server))) { + pdo_mysql_error_stmt(stmt); + return 0; + } } if (NULL == S->result) { http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.169&r2=1.170&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.169 php-src/ext/pdo/pdo_stmt.c:1.170 --- php-src/ext/pdo/pdo_stmt.c:1.169Mon Dec 4 03:08:52 2006 +++ php-src/ext/pdo/pdo_stmt.c Fri Dec 8 19:51:29 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.169 2006/12/04 03:08:52 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.170 2006/12/08 19:51:29 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -1827,10 +1827,6 @@ static int pdo_stmt_do_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) { - if (!stmt->methods->next_rowset(stmt TSRMLS_CC)) { - return 0; - } - /* un-describe */ if (stmt->columns) { int i; @@ -1844,6 +1840,10 @@ stmt->column_count = 0; } + if (!stmt->methods->next_rowset(stmt TSRMLS_CC)) { + return 0; + } + pdo_stmt_describe_columns(stmt TSRMLS_CC); return 1; @@ -1864,8 +1864,6 @@ PDO_HANDLE_STMT_ERR(); RETURN_FALSE; } - - pdo_stmt_describe_columns(stmt TSRMLS_CC); RETURN_TRUE; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Mon Dec 4 03:08:52 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB: Fixed bug #38319 (Remove bogus warnings from persistent PDO connections). http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.168&r2=1.169&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.168 php-src/ext/pdo/pdo_stmt.c:1.169 --- php-src/ext/pdo/pdo_stmt.c:1.168Tue Nov 28 16:28:07 2006 +++ php-src/ext/pdo/pdo_stmt.c Mon Dec 4 03:08:52 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.168 2006/11/28 16:28:07 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.169 2006/12/04 03:08:52 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -1762,12 +1762,11 @@ stmt->fetch.cls.ce = *cep; stmt->fetch.cls.ctor_args = NULL; - +#ifdef ilia_0 /* we'll only need this when we have persistent statements, if ever */ if (stmt->dbh->is_persistent) { - /* TODO: CRITICAL for final release */ php_error_docref(NULL TSRMLS_CC, E_WARNING, "PHP might crash if you don't call $stmt->setFetchMode() to reset to defaults on this persistent statement. This will be fixed in a later release"); } - +#endif if (argc == 3) { if (Z_TYPE_PP(args[skip+2]) != IS_NULL && Z_TYPE_PP(args[skip+2]) != IS_ARRAY) { pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "ctor_args must be either NULL or an array" TSRMLS_CC); @@ -1788,11 +1787,11 @@ if (Z_TYPE_PP(args[skip+1]) != IS_OBJECT) { goto fail_out; } - +#ifdef ilia_0 /* we'll only need this when we have persistent statements, if ever */ if (stmt->dbh->is_persistent) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "PHP might crash if you don't call $stmt->setFetchMode() to reset to defaults on this persistent statement. This will be fixed in a later release"); } - +#endif MAKE_STD_ZVAL(stmt->fetch.into); Z_TYPE_P(stmt->fetch.into) = IS_OBJECT; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo_pgsql pgsql_statement.c
iliaa Tue Nov 28 16:28:07 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c /php-src/ext/pdo_pgsql pgsql_statement.c Log: MFB: Fixed bug #39656 (crash when calling fetch() on a PDO statment object after closeCursor()). http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.167&r2=1.168&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.167 php-src/ext/pdo/pdo_stmt.c:1.168 --- php-src/ext/pdo/pdo_stmt.c:1.167Tue Nov 7 17:57:37 2006 +++ php-src/ext/pdo/pdo_stmt.c Tue Nov 28 16:28:07 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.167 2006/11/07 17:57:37 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.168 2006/11/28 16:28:07 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -434,7 +434,7 @@ if (!stmt->executed) { /* this is the first execute */ - if (stmt->dbh->alloc_own_columns) { + if (stmt->dbh->alloc_own_columns && !stmt->columns) { /* for "big boy" drivers, we need to allocate memory to fetch * the results into, so lets do that now */ ret = pdo_stmt_describe_columns(stmt TSRMLS_CC); @@ -565,6 +565,10 @@ static int do_fetch_common(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori, long offset, int do_bind TSRMLS_DC) /* {{{ */ { + if (!stmt->executed) { + return 0; + } + if (!dispatch_param_event(stmt, PDO_PARAM_EVT_FETCH_PRE TSRMLS_CC)) { return 0; } @@ -1888,6 +1892,7 @@ } } while (1); + stmt->executed = 0; RETURN_TRUE; } @@ -1897,7 +1902,7 @@ PDO_HANDLE_STMT_ERR(); RETURN_FALSE; } - + stmt->executed = 0; RETURN_TRUE; } /* }}} */ http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_pgsql/pgsql_statement.c?r1=1.41&r2=1.42&diff_format=u Index: php-src/ext/pdo_pgsql/pgsql_statement.c diff -u php-src/ext/pdo_pgsql/pgsql_statement.c:1.41 php-src/ext/pdo_pgsql/pgsql_statement.c:1.42 --- php-src/ext/pdo_pgsql/pgsql_statement.c:1.41Thu Nov 16 17:34:42 2006 +++ php-src/ext/pdo_pgsql/pgsql_statement.c Tue Nov 28 16:28:07 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: pgsql_statement.c,v 1.41 2006/11/16 17:34:42 iliaa Exp $ */ +/* $Id: pgsql_statement.c,v 1.42 2006/11/28 16:28:07 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -140,7 +140,7 @@ return 0; } - if(!stmt->executed) { + if (!stmt->executed && !stmt->column_count) { stmt->column_count = (int) PQnfields(S->result); S->cols = ecalloc(stmt->column_count, sizeof(pdo_pgsql_column)); } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo/tests bug_39398.phpt
iliaa Tue Nov 7 17:57:37 2006 UTC Modified files: /php-src/ext/pdo/tests bug_39398.phpt /php-src/ext/pdopdo_stmt.c Log: MFB: Fixed bug #39398 (Booleans are not automatically translated to integers). http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/tests/bug_39398.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/pdo/tests/bug_39398.phpt diff -u /dev/null php-src/ext/pdo/tests/bug_39398.phpt:1.2 --- /dev/null Tue Nov 7 17:57:37 2006 +++ php-src/ext/pdo/tests/bug_39398.phptTue Nov 7 17:57:37 2006 @@ -0,0 +1,35 @@ +--TEST-- +PDO Common: PHP Bug #39398: Booleans are not automatically translated to integers +--SKIPIF-- + +--FILE-- +exec("CREATE TABLE test (test INT)"); + +$boolean = 1; +$stmt = $db->prepare('INSERT INTO test VALUES (:boolean)'); +$stmt->bindValue(':boolean', isset($boolean), PDO::PARAM_INT); +$stmt->execute(); + +var_dump($db->query("SELECT * FROM test")->fetchAll(PDO::FETCH_ASSOC)); +?> +===DONE=== +--EXPECT-- +array(1) { + [0]=> + array(1) { +["test"]=> +string(1) "1" + } +} +===DONE=== http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.166&r2=1.167&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.166 php-src/ext/pdo/pdo_stmt.c:1.167 --- php-src/ext/pdo/pdo_stmt.c:1.166Wed Aug 23 19:15:46 2006 +++ php-src/ext/pdo/pdo_stmt.c Tue Nov 7 17:57:37 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.166 2006/08/23 19:15:46 tony2001 Exp $ */ +/* $Id: pdo_stmt.c,v 1.167 2006/11/07 17:57:37 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -278,6 +278,10 @@ if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_STR && param->max_value_len <= 0 && ! ZVAL_IS_NULL(param->parameter)) { convert_to_string(param->parameter); + } else if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_INT && Z_TYPE_P(param->parameter) == IS_BOOL) { + convert_to_long(param->parameter); + } else if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_BOOL && Z_TYPE_P(param->parameter) == IS_LONG) { + convert_to_boolean(param->parameter); } param->stmt = stmt; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
tony2001Wed Aug 23 19:15:46 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: fix possible crash in free_statement() http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.165&r2=1.166&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.165 php-src/ext/pdo/pdo_stmt.c:1.166 --- php-src/ext/pdo/pdo_stmt.c:1.165Wed Aug 9 14:46:35 2006 +++ php-src/ext/pdo/pdo_stmt.c Wed Aug 23 19:15:46 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.165 2006/08/09 14:46:35 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.166 2006/08/23 19:15:46 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -2168,7 +2168,9 @@ do_fetch_opt_finish(stmt, 1 TSRMLS_CC); zend_objects_store_del_ref(&stmt->database_object_handle TSRMLS_CC); - php_pdo_dbh_delref(stmt->dbh TSRMLS_CC); + if (stmt->dbh) { + php_pdo_dbh_delref(stmt->dbh TSRMLS_CC); + } efree(stmt); } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo/tests bug_38394.phpt
iliaa Wed Aug 9 14:46:35 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c /php-src/ext/pdo/tests bug_38394.phpt Log: MFB: Fixed bug #38394 (PDO fails to recover from failed prepared statement execution). http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.164&r2=1.165&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.164 php-src/ext/pdo/pdo_stmt.c:1.165 --- php-src/ext/pdo/pdo_stmt.c:1.164Tue Aug 8 16:59:10 2006 +++ php-src/ext/pdo/pdo_stmt.c Wed Aug 9 14:46:35 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.164 2006/08/08 16:59:10 tony2001 Exp $ */ +/* $Id: pdo_stmt.c,v 1.165 2006/08/09 14:46:35 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -357,6 +357,12 @@ zval **tmp; uint str_length; ulong num_index; + + if (stmt->bound_params) { + zend_hash_destroy(stmt->bound_params); + FREE_HASHTABLE(stmt->bound_params); + stmt->bound_params = NULL; + } zend_hash_internal_pointer_reset(Z_ARRVAL_P(input_params)); while (SUCCESS == zend_hash_get_current_data(Z_ARRVAL_P(input_params), (void*)&tmp)) { http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/tests/bug_38394.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/pdo/tests/bug_38394.phpt diff -u /dev/null php-src/ext/pdo/tests/bug_38394.phpt:1.2 --- /dev/null Wed Aug 9 14:46:35 2006 +++ php-src/ext/pdo/tests/bug_38394.phptWed Aug 9 14:46:35 2006 @@ -0,0 +1,50 @@ +--TEST-- +PDO Common: PHP Bug #38394: Prepared statement error stops subsequent statements +--SKIPIF-- + +--FILE-- +exec("CREATE TABLE test (a INT, b INT, c INT)"); +$s = $db->prepare("INSERT INTO test (a,b,c) VALUES (:a,:b,:c)"); + +$s->execute(array('a' => 1, 'b' => 2, 'c' => 3)); + [EMAIL PROTECTED]>execute(array('a' => 5, 'b' => 6, 'c' => 7, 'd' => 8)); + +$s->execute(array('a' => 9, 'b' => 10, 'c' => 11)); + +var_dump($db->query("SELECT * FROM test")->fetchAll(PDO::FETCH_ASSOC)); +?> +===DONE=== +--EXPECTF-- +array(2) { + [0]=> + array(3) { +["a"]=> +string(1) "1" +["b"]=> +string(1) "2" +["c"]=> +string(1) "3" + } + [1]=> + array(3) { +["a"]=> +string(1) "9" +["b"]=> +string(2) "10" +["c"]=> +string(2) "11" + } +} +===DONE=== -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Tue Aug 1 15:06:12 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB: Fixed memory leak on unused bound name parameters. http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.162&r2=1.163&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.162 php-src/ext/pdo/pdo_stmt.c:1.163 --- php-src/ext/pdo/pdo_stmt.c:1.162Mon Jul 31 20:19:18 2006 +++ php-src/ext/pdo/pdo_stmt.c Tue Aug 1 15:06:12 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.162 2006/07/31 20:19:18 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.163 2006/08/01 15:06:12 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -1452,7 +1452,11 @@ } ZVAL_ADDREF(param.parameter); - return really_register_bound_param(¶m, stmt, is_param TSRMLS_CC); + if (!really_register_bound_param(¶m, stmt, is_param TSRMLS_CC)) { + zval_ptr_dtor(&(param.parameter)); + return 0; + } + return 1; } /* }}} */ /* {{{ proto bool PDOStatement::bindValue(mixed $paramno, mixed $param [, int $type ]) @@ -1481,7 +1485,11 @@ } ZVAL_ADDREF(param.parameter); - RETURN_BOOL(really_register_bound_param(¶m, stmt, TRUE TSRMLS_CC)); + if (!really_register_bound_param(¶m, stmt, TRUE TSRMLS_CC)) { + zval_ptr_dtor(&(param.parameter)); + RETURN_FALSE; + } + RETURN_TRUE; } /* }}} */ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo/tests bug_38253.phpt
tony2001Sun Jul 30 11:20:41 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c /php-src/ext/pdo/tests bug_38253.phpt Log: MFB: bug #38253 (PDO produces segfault with default fetch mode) add test http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.160&r2=1.161&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.160 php-src/ext/pdo/pdo_stmt.c:1.161 --- php-src/ext/pdo/pdo_stmt.c:1.160Tue Jun 20 13:25:54 2006 +++ php-src/ext/pdo/pdo_stmt.c Sun Jul 30 11:20:40 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.160 2006/06/20 13:25:54 tony2001 Exp $ */ +/* $Id: pdo_stmt.c,v 1.161 2006/07/30 11:20:40 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -842,6 +842,10 @@ zval_dtor(&val); } ce = stmt->fetch.cls.ce; + if (!ce) { + pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "No fetch class specified" TSRMLS_CC); + return 0; + } if ((flags & PDO_FETCH_SERIALIZE) == 0) { object_init_ex(return_value, ce); if (!stmt->fetch.cls.fci.size) { @@ -883,6 +887,10 @@ break; case PDO_FETCH_FUNC: + if (!stmt->fetch.func.function) { + pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "No fetch function specified" TSRMLS_CC); + return 0; + } if (!stmt->fetch.func.fci.size) { if (!do_fetch_func_prepare(stmt TSRMLS_CC)) { http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/tests/bug_38253.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/pdo/tests/bug_38253.phpt diff -u /dev/null php-src/ext/pdo/tests/bug_38253.phpt:1.2 --- /dev/null Sun Jul 30 11:20:41 2006 +++ php-src/ext/pdo/tests/bug_38253.phptSun Jul 30 11:20:41 2006 @@ -0,0 +1,47 @@ +--TEST-- +PDO Common: PHP Bug #38253: PDO produces segfault with default fetch mode +--SKIPIF-- + +--FILE-- +exec ("create table test (id integer primary key, n text)"); +$pdo->exec ("INSERT INTO test (n) VALUES ('hi')"); + +$pdo->setAttribute (PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_CLASS); +$stmt = $pdo->prepare ("SELECT * FROM test"); +$stmt->execute(); +var_dump($stmt->fetchAll()); + +$pdo = PDOTest::factory(); + +$pdo->exec ("create table test2 (id integer primary key, n text)"); +$pdo->exec ("INSERT INTO test2 (n) VALUES ('hi')"); + +$pdo->setAttribute (PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_FUNC); +$stmt = $pdo->prepare ("SELECT * FROM test2"); +$stmt->execute(); +var_dump($stmt->fetchAll()); + +?> +--EXPECTF-- +Warning: PDOStatement::fetchAll(): SQLSTATE[HY000]: General error: No fetch class specified in %s on line %d + +Warning: PDOStatement::fetchAll(): SQLSTATE[HY000]: General error%s on line %d +array(0) { +} + +Warning: PDOStatement::fetchAll(): SQLSTATE[HY000]: General error: No fetch function specified in %s on line %d + +Warning: PDOStatement::fetchAll(): SQLSTATE[HY000]: General error%s on line %d +array(0) { +} -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
tony2001Tue Jun 20 13:25:54 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: init variables http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.159&r2=1.160&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.159 php-src/ext/pdo/pdo_stmt.c:1.160 --- php-src/ext/pdo/pdo_stmt.c:1.159Tue May 30 09:46:01 2006 +++ php-src/ext/pdo/pdo_stmt.c Tue Jun 20 13:25:54 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.159 2006/05/30 09:46:01 tony2001 Exp $ */ +/* $Id: pdo_stmt.c,v 1.160 2006/06/20 13:25:54 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -759,9 +759,9 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, enum pdo_fetch_type how, enum pdo_fetch_orientation ori, long offset, zval *return_all TSRMLS_DC) /* {{{ */ { - int flags = how & PDO_FETCH_FLAGS, idx, old_arg_count; - zend_class_entry * ce, * old_ce; - zval grp_val, *grp, **pgrp, *retval, *old_ctor_args; + int flags = how & PDO_FETCH_FLAGS, idx, old_arg_count = 0; + zend_class_entry *ce = NULL, *old_ce = NULL; + zval grp_val, *grp, **pgrp, *retval, *old_ctor_args = NULL; how = how & ~PDO_FETCH_FLAGS; if (how == PDO_FETCH_USE_DEFAULT) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
tony2001Tue May 30 09:46:01 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: need to call zend_is_callable() if callable is known to be invalid http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.158&r2=1.159&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.158 php-src/ext/pdo/pdo_stmt.c:1.159 --- php-src/ext/pdo/pdo_stmt.c:1.158Sat Apr 22 19:10:40 2006 +++ php-src/ext/pdo/pdo_stmt.c Tue May 30 09:46:01 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.158 2006/04/22 19:10:40 tony2001 Exp $ */ +/* $Id: pdo_stmt.c,v 1.159 2006/05/30 09:46:01 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -651,7 +651,7 @@ static int make_callable_ex(pdo_stmt_t *stmt, zval *callable, zend_fcall_info * fci, zend_fcall_info_cache * fcc, int num_args TSRMLS_DC) /* {{{ */ { - zval **object = NULL, **method; + zval **object = NULL, **method = NULL; zend_class_entry * ce = NULL, **pce; zend_function *function_handler; zstr lcname; @@ -688,7 +688,7 @@ method = &callable; } - if (!zend_is_callable(callable, 0, NULL)) { + if (!method || !zend_is_callable(callable, 0, NULL)) { pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "user-supplied function must be a valid callback" TSRMLS_CC); return 0; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
tony2001Sat Apr 22 19:10:40 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: don't segfault if an exception has been thrown from the fetch handler http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.157&r2=1.158&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.157 php-src/ext/pdo/pdo_stmt.c:1.158 --- php-src/ext/pdo/pdo_stmt.c:1.157Mon Mar 27 16:43:02 2006 +++ php-src/ext/pdo/pdo_stmt.c Sat Apr 22 19:10:40 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.157 2006/03/27 16:43:02 tony2001 Exp $ */ +/* $Id: pdo_stmt.c,v 1.158 2006/04/22 19:10:40 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -1055,7 +1055,7 @@ if (return_all) { zval_ptr_dtor(&return_value); /* we don't need that */ return_value = retval; - } else { + } else if (retval) { *return_value = *retval; zval_copy_ctor(return_value); INIT_PZVAL(return_value); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
tony2001Mon Mar 27 16:43:02 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: fix possible NULL dereference http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.156&r2=1.157&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.156 php-src/ext/pdo/pdo_stmt.c:1.157 --- php-src/ext/pdo/pdo_stmt.c:1.156Mon Mar 27 10:25:35 2006 +++ php-src/ext/pdo/pdo_stmt.c Mon Mar 27 16:43:02 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.156 2006/03/27 10:25:35 dmitry Exp $ */ +/* $Id: pdo_stmt.c,v 1.157 2006/03/27 16:43:02 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -611,6 +611,7 @@ if (!ce) { stmt->fetch.cls.ce = ZEND_STANDARD_CLASS_DEF_PTR; + ce = ZEND_STANDARD_CLASS_DEF_PTR; } if (ce->constructor) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
dmitry Mon Mar 27 10:25:36 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: Unicode support http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.155&r2=1.156&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.155 php-src/ext/pdo/pdo_stmt.c:1.156 --- php-src/ext/pdo/pdo_stmt.c:1.155Sun Mar 19 19:46:18 2006 +++ php-src/ext/pdo/pdo_stmt.c Mon Mar 27 10:25:35 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.155 2006/03/19 19:46:18 helly Exp $ */ +/* $Id: pdo_stmt.c,v 1.156 2006/03/27 10:25:35 dmitry Exp $ */ /* The PDO Statement Handle Class */ @@ -794,7 +794,7 @@ case PDO_FETCH_NAMED: if (!return_all) { ALLOC_HASHTABLE(return_value->value.ht); - zend_hash_init(return_value->value.ht, stmt->column_count, NULL, ZVAL_PTR_DTOR, 0); + zend_u_hash_init(return_value->value.ht, stmt->column_count, NULL, ZVAL_PTR_DTOR, 0, UG(unicode)); Z_TYPE_P(return_value) = IS_ARRAY; } else { array_init(return_value); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Sun Mar 19 17:35:56 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB51: Properly calculate the size of the result array. http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.152&r2=1.153&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.152 php-src/ext/pdo/pdo_stmt.c:1.153 --- php-src/ext/pdo/pdo_stmt.c:1.152Sat Mar 18 23:09:47 2006 +++ php-src/ext/pdo/pdo_stmt.c Sun Mar 19 17:35:56 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.152 2006/03/18 23:09:47 helly Exp $ */ +/* $Id: pdo_stmt.c,v 1.153 2006/03/19 17:35:56 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -791,7 +791,13 @@ case PDO_FETCH_BOTH: case PDO_FETCH_NUM: case PDO_FETCH_NAMED: - array_init(return_value); + if (!return_all) { + ALLOC_HASHTABLE(return_value->value.ht); + zend_hash_init(return_value->value.ht, stmt->column_count, NULL, ZVAL_PTR_DTOR, 0); + Z_TYPE_P(return_value) = IS_ARRAY; + } else { + array_init(return_value); + } break; case PDO_FETCH_COLUMN: -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
tony2001Sat Mar 18 22:25:29 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: check stream for NULL before writing to it remove unnecessary semicolons http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.150&r2=1.151&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.150 php-src/ext/pdo/pdo_stmt.c:1.151 --- php-src/ext/pdo/pdo_stmt.c:1.150Wed Mar 15 15:27:08 2006 +++ php-src/ext/pdo/pdo_stmt.c Sat Mar 18 22:25:29 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.150 2006/03/15 15:27:08 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.151 2006/03/18 22:25:29 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -42,19 +42,19 @@ * since it is a .c file, it won't be installed for use by PECL extensions, so we include it here. */ ZEND_BEGIN_ARG_INFO(first_arg_force_ref, 0) ZEND_ARG_PASS_INFO(1) -ZEND_END_ARG_INFO(); +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(second_arg_force_ref, 0) ZEND_ARG_PASS_INFO(0) ZEND_ARG_PASS_INFO(1) -ZEND_END_ARG_INFO(); +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(third_arg_force_ref, 0) ZEND_ARG_PASS_INFO(0) ZEND_ARG_PASS_INFO(0) ZEND_ARG_PASS_INFO(1) -ZEND_END_ARG_INFO(); +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(fourth_arg_force_ref, 0) @@ -62,10 +62,10 @@ ZEND_ARG_PASS_INFO(0) ZEND_ARG_PASS_INFO(0) ZEND_ARG_PASS_INFO(1) -ZEND_END_ARG_INFO(); +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(all_args_by_ref, 1) -ZEND_END_ARG_INFO(); +ZEND_END_ARG_INFO() /* }}} */ #endif @@ -1876,6 +1876,10 @@ struct pdo_bound_param_data *param; PHP_STMT_GET_OBJ; + if (out == NULL) { + RETURN_FALSE; + } + php_stream_printf(out TSRMLS_CC, "SQL: [%d] %.*s\n", stmt->query_stringlen, stmt->query_stringlen, stmt->query_string); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Wed Mar 15 15:27:08 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB51: Fixed memory leak on unused bind var. http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.149&r2=1.150&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.149 php-src/ext/pdo/pdo_stmt.c:1.150 --- php-src/ext/pdo/pdo_stmt.c:1.149Thu Mar 2 13:12:45 2006 +++ php-src/ext/pdo/pdo_stmt.c Wed Mar 15 15:27:08 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.149 2006/03/02 13:12:45 dmitry Exp $ */ +/* $Id: pdo_stmt.c,v 1.150 2006/03/15 15:27:08 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -322,6 +322,10 @@ } if (is_param && !rewrite_name_to_position(stmt, pparam TSRMLS_CC)) { + if (param->name) { + efree(param->name); + param->name = NULL; + } return 0; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
dmitry Mon Feb 20 10:50:58 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: Fixed wrong prototype and error message http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.144&r2=1.145&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.144 php-src/ext/pdo/pdo_stmt.c:1.145 --- php-src/ext/pdo/pdo_stmt.c:1.144Mon Feb 13 10:23:57 2006 +++ php-src/ext/pdo/pdo_stmt.c Mon Feb 20 10:50:58 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.144 2006/02/13 10:23:57 dmitry Exp $ */ +/* $Id: pdo_stmt.c,v 1.145 2006/02/20 10:50:58 dmitry Exp $ */ /* The PDO Statement Handle Class */ @@ -2177,14 +2177,10 @@ return I->fetch_ahead ? SUCCESS : FAILURE; } -static void pdo_stmt_iter_get_data(zend_object_iterator *iter, zval ***data, int by_ref TSRMLS_DC) +static void pdo_stmt_iter_get_data(zend_object_iterator *iter, zval ***data TSRMLS_DC) { struct php_pdo_iterator *I = (struct php_pdo_iterator*)iter->data; - if (by_ref) { - zend_error(E_ERROR, "An iterator cannot be used with foreach by reference"); - } - /* sanity */ if (!I->fetch_ahead) { *data = NULL; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Sun Jan 1 20:08:19 2006 UTC Modified files: /php-src/ext/pdopdo_stmt.c Log: Fixed bug #35797 (segfault on PDOStatement::execute() with zend.ze1_compatibility_mode = On). http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.138&r2=1.139&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.138 php-src/ext/pdo/pdo_stmt.c:1.139 --- php-src/ext/pdo/pdo_stmt.c:1.138Sun Jan 1 13:09:52 2006 +++ php-src/ext/pdo/pdo_stmt.c Sun Jan 1 20:08:19 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.138 2006/01/01 13:09:52 sniper Exp $ */ +/* $Id: pdo_stmt.c,v 1.139 2006/01/01 20:08:19 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -2006,6 +2006,34 @@ return -1; } +static zend_object_value dbstmt_clone_obj(zval *zobject TSRMLS_DC) +{ + zend_object_value retval; + zval *tmp; + pdo_stmt_t *stmt; + pdo_stmt_t *old_stmt; + zend_object_handle handle = Z_OBJ_HANDLE_P(zobject); + + stmt = ecalloc(1, sizeof(*stmt)); + stmt->ce = Z_OBJCE_P(zobject); + stmt->refcount = 1; + ALLOC_HASHTABLE(stmt->properties); + zend_hash_init(stmt->properties, 0, NULL, ZVAL_PTR_DTOR, 0); + zend_hash_copy(stmt->properties, &stmt->ce->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); + + old_stmt = (pdo_stmt_t *)zend_object_store_get_object(zobject TSRMLS_CC); + + retval.handle = zend_objects_store_put(stmt, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t)pdo_dbstmt_free_storage, (zend_objects_store_clone_t)dbstmt_clone_obj TSRMLS_CC); + retval.handlers = Z_OBJ_HT_P(zobject); + + zend_objects_clone_members((zend_object *)stmt, retval, (zend_object *)old_stmt, handle TSRMLS_CC); + + zend_objects_store_add_ref(&old_stmt->database_object_handle TSRMLS_CC); + stmt->database_object_handle = old_stmt->database_object_handle; + + return retval; +} + zend_object_handlers pdo_dbstmt_object_handlers; void pdo_stmt_init(TSRMLS_D) @@ -2024,6 +2052,7 @@ pdo_dbstmt_object_handlers.unset_property = dbstmt_prop_delete; pdo_dbstmt_object_handlers.get_method = dbstmt_method_get; pdo_dbstmt_object_handlers.compare_objects = dbstmt_compare; + pdo_dbstmt_object_handlers.clone_obj = dbstmt_clone_obj; INIT_CLASS_ENTRY(ce, "PDORow", pdo_row_functions); pdo_row_ce = zend_register_internal_class(&ce TSRMLS_CC); @@ -2108,7 +2137,7 @@ zend_hash_init(stmt->properties, 0, NULL, ZVAL_PTR_DTOR, 0); zend_hash_copy(stmt->properties, &ce->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); - retval.handle = zend_objects_store_put(stmt, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t)pdo_dbstmt_free_storage, NULL TSRMLS_CC); + retval.handle = zend_objects_store_put(stmt, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t)pdo_dbstmt_free_storage, (zend_objects_store_clone_t)dbstmt_clone_obj TSRMLS_CC); retval.handlers = &pdo_dbstmt_object_handlers; return retval; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Sat Dec 17 20:00:14 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB51: Fixed memory corruption when FETCH_LAZY mode is being used. http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.136&r2=1.137&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.136 php-src/ext/pdo/pdo_stmt.c:1.137 --- php-src/ext/pdo/pdo_stmt.c:1.136Thu Dec 15 22:35:18 2005 +++ php-src/ext/pdo/pdo_stmt.c Sat Dec 17 20:00:14 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.136 2005/12/15 22:35:18 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.137 2005/12/17 20:00:14 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -228,7 +228,7 @@ Z_TYPE(stmt->lazy_object_ref) = IS_OBJECT; Z_OBJ_HANDLE(stmt->lazy_object_ref) = zend_objects_store_put(stmt, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t)pdo_row_free_storage, NULL TSRMLS_CC); Z_OBJ_HT(stmt->lazy_object_ref) = &pdo_row_object_handlers; - /* stmt->refcount++; */ + stmt->refcount++; } Z_TYPE_P(return_value) = IS_OBJECT; Z_OBJ_HANDLE_P(return_value) = Z_OBJ_HANDLE(stmt->lazy_object_ref); @@ -2408,13 +2408,11 @@ void pdo_row_free_storage(pdo_stmt_t *stmt TSRMLS_DC) { -#if 0 ZVAL_NULL(&stmt->lazy_object_ref); if (--stmt->refcount == 0) { free_statement(stmt TSRMLS_CC); } -#endif } zend_object_value pdo_row_new(zend_class_entry *ce TSRMLS_DC) -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Thu Dec 15 22:35:19 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: MFB51: Fixed bug #35694 (Improved error message for invalid fetch mode). http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.135&r2=1.136&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.135 php-src/ext/pdo/pdo_stmt.c:1.136 --- php-src/ext/pdo/pdo_stmt.c:1.135Tue Dec 6 02:24:41 2005 +++ php-src/ext/pdo/pdo_stmt.c Thu Dec 15 22:35:18 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.135 2005/12/06 02:24:41 sniper Exp $ */ +/* $Id: pdo_stmt.c,v 1.136 2005/12/15 22:35:18 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -1742,13 +1742,8 @@ break; default: - if ((mode & ~PDO_FETCH_FLAGS) < PDO_FETCH__MAX && (mode & ~PDO_FETCH_FLAGS) >= 0) { - pdo_raise_impl_error(stmt->dbh, stmt, "22003", "unhandled mode; this is a PDO bug, please report it" TSRMLS_CC); - } else { - pdo_raise_impl_error(stmt->dbh, stmt, "22003", "mode is out of range" TSRMLS_CC); - } - efree(args); - return FAILURE; + pdo_raise_impl_error(stmt->dbh, stmt, "22003", "Invalid fetch mode specified" TSRMLS_CC); + goto fail_out; } stmt->default_fetch_type = mode; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
tony2001Thu Dec 1 15:39:50 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: tweak the fix http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.133&r2=1.134&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.133 php-src/ext/pdo/pdo_stmt.c:1.134 --- php-src/ext/pdo/pdo_stmt.c:1.133Thu Dec 1 14:59:36 2005 +++ php-src/ext/pdo/pdo_stmt.c Thu Dec 1 15:39:49 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.133 2005/12/01 19:59:36 tony2001 Exp $ */ +/* $Id: pdo_stmt.c,v 1.134 2005/12/01 20:39:49 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -1069,13 +1069,13 @@ { int flags = mode & PDO_FETCH_FLAGS; + mode = mode & ~PDO_FETCH_FLAGS; + if (mode < 0 || mode > PDO_FETCH__MAX) { pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "invalid fetch mode" TSRMLS_CC); return 0; } - mode = mode & ~PDO_FETCH_FLAGS; - if (mode == PDO_FETCH_USE_DEFAULT) { flags = stmt->default_fetch_type & PDO_FETCH_FLAGS; mode = stmt->default_fetch_type & ~PDO_FETCH_FLAGS; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
tony2001Thu Dec 1 14:59:40 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: fix #35508 (PDO fails when unknown fetch mode specified) http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.132&r2=1.133&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.132 php-src/ext/pdo/pdo_stmt.c:1.133 --- php-src/ext/pdo/pdo_stmt.c:1.132Sun Nov 27 15:56:46 2005 +++ php-src/ext/pdo/pdo_stmt.c Thu Dec 1 14:59:36 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.132 2005/11/27 20:56:46 tony2001 Exp $ */ +/* $Id: pdo_stmt.c,v 1.133 2005/12/01 19:59:36 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -1068,6 +1068,11 @@ static int pdo_stmt_verify_mode(pdo_stmt_t *stmt, int mode, int fetch_all TSRMLS_DC) /* {{{ */ { int flags = mode & PDO_FETCH_FLAGS; + + if (mode < 0 || mode > PDO_FETCH__MAX) { + pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "invalid fetch mode" TSRMLS_CC); + return 0; + } mode = mode & ~PDO_FETCH_FLAGS; @@ -1657,10 +1662,12 @@ mode = Z_LVAL_PP(args[skip]); if (!pdo_stmt_verify_mode(stmt, mode, 0 TSRMLS_CC)) { + efree(args); return FAILURE; } switch (mode & ~PDO_FETCH_FLAGS) { + case PDO_FETCH_USE_DEFAULT: case PDO_FETCH_LAZY: case PDO_FETCH_ASSOC: case PDO_FETCH_NUM: @@ -1740,6 +1747,7 @@ } else { pdo_raise_impl_error(stmt->dbh, stmt, "22003", "mode is out of range" TSRMLS_CC); } + efree(args); return FAILURE; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
tony2001Sun Nov 27 15:56:47 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: fix #35430 (PDO crashes on incorrect FETCH_FUNC use) http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.131&r2=1.132&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.131 php-src/ext/pdo/pdo_stmt.c:1.132 --- php-src/ext/pdo/pdo_stmt.c:1.131Thu Nov 24 11:22:27 2005 +++ php-src/ext/pdo/pdo_stmt.c Sun Nov 27 15:56:46 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.131 2005/11/24 16:22:27 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.132 2005/11/27 20:56:46 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -1305,13 +1305,15 @@ switch(ZEND_NUM_ARGS()) { case 0: case 1: + pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "no fetch function specified" TSRMLS_CC); + error = 1; break; case 3: case 2: stmt->fetch.func.function = arg2; + do_fetch_func_prepare(stmt TSRMLS_CC); break; } - do_fetch_func_prepare(stmt TSRMLS_CC); break; case PDO_FETCH_COLUMN: -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Mon Oct 10 10:43:51 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: Fixed bug #34809 (FETCH_INTO in PDO crashes without a destination object). http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.127&r2=1.128&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.127 php-src/ext/pdo/pdo_stmt.c:1.128 --- php-src/ext/pdo/pdo_stmt.c:1.127Wed Sep 21 18:53:47 2005 +++ php-src/ext/pdo/pdo_stmt.c Mon Oct 10 10:43:51 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.127 2005/09/21 22:53:47 helly Exp $ */ +/* $Id: pdo_stmt.c,v 1.128 2005/10/10 14:43:51 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -824,6 +824,12 @@ break; case PDO_FETCH_INTO: + if (!stmt->fetch.into) { + pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "No fetch-into object specified." TSRMLS_CC); + return 0; + break; + } + Z_TYPE_P(return_value) = IS_OBJECT; Z_OBJ_HANDLE_P(return_value) = Z_OBJ_HANDLE_P(stmt->fetch.into); Z_OBJ_HT_P(return_value) = Z_OBJ_HT_P(stmt->fetch.into); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
dmitry Mon Sep 12 02:31:55 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: ZTS fix http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.125&r2=1.126&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.125 php-src/ext/pdo/pdo_stmt.c:1.126 --- php-src/ext/pdo/pdo_stmt.c:1.125Sun Sep 11 01:03:58 2005 +++ php-src/ext/pdo/pdo_stmt.c Mon Sep 12 02:31:54 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.125 2005/09/11 05:03:58 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.126 2005/09/12 06:31:54 dmitry Exp $ */ /* The PDO Statement Handle Class */ @@ -1865,7 +1865,7 @@ Prevents use of a PDOStatement instance that has been unserialized */ static PHP_METHOD(PDOStatement, __wakeup) { - zend_throw_exception_ex(php_pdo_get_exception(), 0 TSRMLS_CC, "You cannot serialize or unserialize PDOStatement instances"); + zend_throw_exception_ex(php_pdo_get_exception(TSRMLS_C), 0 TSRMLS_CC, "You cannot serialize or unserialize PDOStatement instances"); } /* }}} */ @@ -1873,7 +1873,7 @@ Prevents serialization of a PDOStatement instance */ static PHP_METHOD(PDOStatement, __sleep) { - zend_throw_exception_ex(php_pdo_get_exception(), 0 TSRMLS_CC, "You cannot serialize or unserialize PDOStatement instances"); + zend_throw_exception_ex(php_pdo_get_exception(TSRMLS_C), 0 TSRMLS_CC, "You cannot serialize or unserialize PDOStatement instances"); } /* }}} */ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
andrei Tue Aug 16 15:43:24 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: And here http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.121&r2=1.122&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.121 php-src/ext/pdo/pdo_stmt.c:1.122 --- php-src/ext/pdo/pdo_stmt.c:1.121Tue Aug 16 12:29:13 2005 +++ php-src/ext/pdo/pdo_stmt.c Tue Aug 16 15:43:23 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.121 2005/08/16 16:29:13 dmitry Exp $ */ +/* $Id: pdo_stmt.c,v 1.122 2005/08/16 19:43:23 andrei Exp $ */ /* The PDO Statement Handle Class */ @@ -800,7 +800,7 @@ fetch_value(stmt, &val, i++ TSRMLS_CC); if (Z_TYPE(val) != IS_NULL) { convert_to_text(&val); - if (zend_u_lookup_class(Z_TYPE(val), Z_STRVAL(val), Z_STRLEN(val), &cep TSRMLS_CC) == FAILURE) { + if (zend_u_lookup_class(Z_TYPE(val), Z_UNIVAL(val), Z_UNILEN(val), &cep TSRMLS_CC) == FAILURE) { stmt->fetch.cls.ce = ZEND_STANDARD_CLASS_DEF_PTR; } else { stmt->fetch.cls.ce = *cep; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Wed Aug 3 14:26:17 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: Fixed memory leak. http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.117&r2=1.118&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.117 php-src/ext/pdo/pdo_stmt.c:1.118 --- php-src/ext/pdo/pdo_stmt.c:1.117Wed Jul 27 10:18:01 2005 +++ php-src/ext/pdo/pdo_stmt.c Wed Aug 3 14:26:16 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.117 2005/07/27 14:18:01 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.118 2005/08/03 18:26:16 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -1994,6 +1994,10 @@ stmt->columns = NULL; } + if (stmt->fetch.into && stmt->default_fetch_type == PDO_FETCH_INTO) { + FREE_ZVAL(stmt->fetch.into); + stmt->fetch.into = NULL; + } do_fetch_opt_finish(stmt, 1 TSRMLS_CC); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
wez Wed Jul 27 10:18:03 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: add sanity checks http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.116&r2=1.117&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.116 php-src/ext/pdo/pdo_stmt.c:1.117 --- php-src/ext/pdo/pdo_stmt.c:1.116Fri Jul 22 10:31:20 2005 +++ php-src/ext/pdo/pdo_stmt.c Wed Jul 27 10:18:01 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.116 2005/07/22 14:31:20 helly Exp $ */ +/* $Id: pdo_stmt.c,v 1.117 2005/07/27 14:18:01 wez Exp $ */ /* The PDO Statement Handle Class */ @@ -1985,9 +1985,13 @@ struct pdo_column_data *cols = stmt->columns; for (i = 0; i < stmt->column_count; i++) { - efree(cols[i].name); + if (cols[i].name) { + efree(cols[i].name); + cols[i].name = NULL; + } } efree(stmt->columns); + stmt->columns = NULL; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
wez Fri Jul 22 00:33:58 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: this looks like a much better fix for refcounting/shutdown in lazy objects. http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.114&r2=1.115&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.114 php-src/ext/pdo/pdo_stmt.c:1.115 --- php-src/ext/pdo/pdo_stmt.c:1.114Thu Jul 21 22:09:19 2005 +++ php-src/ext/pdo/pdo_stmt.c Fri Jul 22 00:33:56 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.114 2005/07/22 02:09:19 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.115 2005/07/22 04:33:56 wez Exp $ */ /* The PDO Statement Handle Class */ @@ -222,7 +222,7 @@ Z_TYPE(stmt->lazy_object_ref) = IS_OBJECT; Z_OBJ_HANDLE(stmt->lazy_object_ref) = zend_objects_store_put(stmt, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t)pdo_row_free_storage, NULL TSRMLS_CC); Z_OBJ_HT(stmt->lazy_object_ref) = &pdo_row_object_handlers; - stmt->refcount++; + /* stmt->refcount++; */ } Z_TYPE_P(return_value) = IS_OBJECT; Z_OBJ_HANDLE_P(return_value) = Z_OBJ_HANDLE(stmt->lazy_object_ref); @@ -2311,11 +2311,13 @@ void pdo_row_free_storage(pdo_stmt_t *stmt TSRMLS_DC) { +#if 0 ZVAL_NULL(&stmt->lazy_object_ref); if (--stmt->refcount == 0) { free_statement(stmt TSRMLS_CC); } +#endif } zend_object_value pdo_row_new(zend_class_entry *ce TSRMLS_DC) -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
wez Thu Jul 21 22:09:19 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: fix leak (ugh, this nuance gets me every time) http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.113&r2=1.114&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.113 php-src/ext/pdo/pdo_stmt.c:1.114 --- php-src/ext/pdo/pdo_stmt.c:1.113Thu Jul 21 21:34:42 2005 +++ php-src/ext/pdo/pdo_stmt.c Thu Jul 21 22:09:19 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.113 2005/07/22 01:34:42 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.114 2005/07/22 02:09:19 wez Exp $ */ /* The PDO Statement Handle Class */ @@ -2163,6 +2163,9 @@ } } } + + return_value->refcount = 0; + return_value->is_ref = 0; return return_value; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo/tests pdo_027.phpt
wez Thu Jul 21 21:34:43 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c /php-src/ext/pdo/tests pdo_027.phpt Log: Fixes #33785 for me http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.112&r2=1.113&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.112 php-src/ext/pdo/pdo_stmt.c:1.113 --- php-src/ext/pdo/pdo_stmt.c:1.112Mon Jul 18 10:46:55 2005 +++ php-src/ext/pdo/pdo_stmt.c Thu Jul 21 21:34:42 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.112 2005/07/18 14:46:55 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.113 2005/07/22 01:34:42 wez Exp $ */ /* The PDO Statement Handle Class */ @@ -227,6 +227,7 @@ Z_TYPE_P(return_value) = IS_OBJECT; Z_OBJ_HANDLE_P(return_value) = Z_OBJ_HANDLE(stmt->lazy_object_ref); Z_OBJ_HT_P(return_value) = Z_OBJ_HT(stmt->lazy_object_ref); + zend_objects_store_add_ref(return_value TSRMLS_CC); } /* }}} */ http://cvs.php.net/diff.php/php-src/ext/pdo/tests/pdo_027.phpt?r1=1.1&r2=1.2&ty=u Index: php-src/ext/pdo/tests/pdo_027.phpt diff -u php-src/ext/pdo/tests/pdo_027.phpt:1.1 php-src/ext/pdo/tests/pdo_027.phpt:1.2 --- php-src/ext/pdo/tests/pdo_027.phpt:1.1 Thu Jul 21 15:33:48 2005 +++ php-src/ext/pdo/tests/pdo_027.phpt Thu Jul 21 21:34:43 2005 @@ -18,9 +18,11 @@ $db->exec("INSERT INTO test (id,name) VALUES(2,'test2')"); foreach ($db->query("SELECT * FROM test", PDO_FETCH_LAZY) as $v) { - echo $v->id.$v->name."\n"; + echo "lazy: " . $v->id.$v->name."\n"; } +echo "End\n"; ?> --EXPECT-- -1test1 -2test2 +lazy: 1test1 +lazy: 2test2 +End -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
wez Mon Jul 18 10:46:55 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: make a start on a debugging function. http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.111&r2=1.112&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.111 php-src/ext/pdo/pdo_stmt.c:1.112 --- php-src/ext/pdo/pdo_stmt.c:1.111Mon Jul 11 23:19:44 2005 +++ php-src/ext/pdo/pdo_stmt.c Mon Jul 18 10:46:55 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.111 2005/07/12 03:19:44 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.112 2005/07/18 14:46:55 wez Exp $ */ /* The PDO Statement Handle Class */ @@ -1776,6 +1776,48 @@ } /* }}} */ +/* {{{ proto void PDOStatement::debugDumpParams() + A utility for internals hackers to debug parameter internals */ +static PHP_METHOD(PDOStatement, debugDumpParams) +{ + pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC); + php_stream *out = php_stream_open_wrapper("php://output", "w", 0, NULL); + HashPosition pos; + struct pdo_bound_param_data *param; + + php_stream_printf(out TSRMLS_CC, "SQL: [%d] %.*s\n", + stmt->query_stringlen, + stmt->query_stringlen, stmt->query_string); + + php_stream_printf(out TSRMLS_CC, "Params: %d\n", + stmt->bound_params ? zend_hash_num_elements(stmt->bound_params) : 0); + + if (stmt->bound_params) { + zend_hash_internal_pointer_reset_ex(stmt->bound_params, &pos); + while (SUCCESS == zend_hash_get_current_data_ex(stmt->bound_params, + (void**)¶m, &pos)) { + char *str; + uint len; + ulong num; + + if (zend_hash_get_current_key_ex(stmt->bound_params, &str, &len, &num, 0, &pos) == HASH_KEY_IS_STRING) { + php_stream_printf(out TSRMLS_CC, "Key: Position #%d:\n", num); + } else { + php_stream_printf(out TSRMLS_CC, "Key: Name: [%d] %.*s\n", len, len, str); + } + + php_stream_printf(out TSRMLS_CC, "paramno=%d\nname=[%d] %.*s\nis_param=%d\nparam_type=%d\n", + param->paramno, param->namelen, param->namelen, param->name, + param->is_param, + param->param_type); + + } + } + + php_stream_close(out); +} +/* }}} */ + function_entry pdo_dbstmt_functions[] = { PHP_ME(PDOStatement, execute, NULL, ZEND_ACC_PUBLIC) @@ -1795,6 +1837,7 @@ PHP_ME(PDOStatement, setFetchMode, NULL, ZEND_ACC_PUBLIC) PHP_ME(PDOStatement, nextRowset,NULL, ZEND_ACC_PUBLIC) PHP_ME(PDOStatement, closeCursor, NULL, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, debugDumpParams, NULL, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} }; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
That doesn't sound right. It should probably be an error to bind by number when using named parameters. Will investigate more. --Wez. On 7/11/05, Andrey Hristov <[EMAIL PROTECTED]> wrote: > andrey Mon Jul 11 10:14:57 2005 EDT > > Modified files: > /php-src/ext/pdopdo_stmt.c > Log: > fix a segfault with the following script: > $dbh = new PDO('mysql:dbname=test;host=localhost', "root", "secret"); > $what = 1; > $stmt = $dbh->prepare('select a, b, c from t123 where a=:what'); > $stmt->bindParam(1, $what, PDO_PARAM_INT, 12); > var_dump($stmt->execute()); > var_dump($stmt->fetchObject()); > ?> > > > http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.108&r2=1.109&ty=u > Index: php-src/ext/pdo/pdo_stmt.c > diff -u php-src/ext/pdo/pdo_stmt.c:1.108 php-src/ext/pdo/pdo_stmt.c:1.109 > --- php-src/ext/pdo/pdo_stmt.c:1.108Fri Jul 8 23:52:39 2005 > +++ php-src/ext/pdo/pdo_stmt.c Mon Jul 11 10:14:56 2005 > @@ -18,7 +18,7 @@ >+--+ > */ > > -/* $Id: pdo_stmt.c,v 1.108 2005/07/09 03:52:39 wez Exp $ */ > +/* $Id: pdo_stmt.c,v 1.109 2005/07/11 14:14:56 andrey Exp $ */ > > /* The PDO Statement Handle Class */ > > @@ -91,7 +91,10 @@ > /* this is not an error here */ > return 1; > } > - > + if (!param->name) { > + return 1; > + } > + > zend_hash_internal_pointer_reset(stmt->bound_param_map); > while (SUCCESS == > zend_hash_get_current_data(stmt->bound_param_map, (void**)&name)) { > if (strcmp(name, param->name)) { > > -- > PHP CVS Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
andrey Mon Jul 11 10:14:57 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: fix a segfault with the following script: prepare('select a, b, c from t123 where a=:what'); $stmt->bindParam(1, $what, PDO_PARAM_INT, 12); var_dump($stmt->execute()); var_dump($stmt->fetchObject()); ?> http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.108&r2=1.109&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.108 php-src/ext/pdo/pdo_stmt.c:1.109 --- php-src/ext/pdo/pdo_stmt.c:1.108Fri Jul 8 23:52:39 2005 +++ php-src/ext/pdo/pdo_stmt.c Mon Jul 11 10:14:56 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.108 2005/07/09 03:52:39 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.109 2005/07/11 14:14:56 andrey Exp $ */ /* The PDO Statement Handle Class */ @@ -91,7 +91,10 @@ /* this is not an error here */ return 1; } - + if (!param->name) { + return 1; + } + zend_hash_internal_pointer_reset(stmt->bound_param_map); while (SUCCESS == zend_hash_get_current_data(stmt->bound_param_map, (void**)&name)) { if (strcmp(name, param->name)) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c php_pdo_driver.h /ext/pdo/tests pdo_016.phpt pdo_018.phpt pdo_021.phpt
wez Fri Jul 8 23:52:41 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c php_pdo_driver.h /php-src/ext/pdo/tests pdo_016.phpt pdo_018.phpt pdo_021.phpt Log: Added: proto bool PDOStatement::closeCursor() Closes the cursor, leaving the statement ready for re-execution. The purpose of the function is to free up the connection to the server so that other queries may be issued, but leaving the statement in a state that it can be re-executed. This is implemented either as an optional driver specific method (allowing for maximum efficiency), or as the generic PDO fallback if no driver specific function is installed. The PDO generic fallback is semantically the same as writing the following code in your PHP script: do { while ($stmt->fetch()) ; if (!$stmt->nextRowset()) break; } while (true); http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.107&r2=1.108&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.107 php-src/ext/pdo/pdo_stmt.c:1.108 --- php-src/ext/pdo/pdo_stmt.c:1.107Fri Jul 8 13:00:28 2005 +++ php-src/ext/pdo/pdo_stmt.c Fri Jul 8 23:52:39 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.107 2005/07/08 17:00:28 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.108 2005/07/09 03:52:39 wez Exp $ */ /* The PDO Statement Handle Class */ @@ -1681,17 +1681,13 @@ /* {{{ proto bool PDOStatement::nextRowset() Advances to the next rowset in a multi-rowset statement handle. Returns true if it succeded, false otherwise */ -static PHP_METHOD(PDOStatement, nextRowset) -{ - pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC); - if (!stmt->methods->next_rowset) { - pdo_raise_impl_error(stmt->dbh, stmt, "IM001", "driver does not support multiple rowsets" TSRMLS_CC); - RETURN_FALSE; +static int pdo_stmt_do_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) +{ + if (!stmt->methods->next_rowset(stmt TSRMLS_CC)) { + return 0; } - PDO_STMT_CLEAR_ERR(); - /* un-describe */ if (stmt->columns) { int i; @@ -1701,11 +1697,27 @@ efree(cols[i].name); } efree(stmt->columns); + stmt->columns = NULL; + stmt->column_count = 0; } - stmt->columns = NULL; - if (!stmt->methods->next_rowset(stmt TSRMLS_CC)) { - stmt->column_count = 0; + pdo_stmt_describe_columns(stmt TSRMLS_CC); + + return 1; +} + +static PHP_METHOD(PDOStatement, nextRowset) +{ + pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (!stmt->methods->next_rowset) { + pdo_raise_impl_error(stmt->dbh, stmt, "IM001", "driver does not support multiple rowsets" TSRMLS_CC); + RETURN_FALSE; + } + + PDO_STMT_CLEAR_ERR(); + + if (!pdo_stmt_do_next_rowset(stmt TSRMLS_CC)) { PDO_HANDLE_STMT_ERR(); RETURN_FALSE; } @@ -1716,6 +1728,41 @@ } /* }}} */ +/* {{{ proto bool PDOStatement::closeCursor() + Closes the cursor, leaving the statement ready for re-execution. */ +static PHP_METHOD(PDOStatement, closeCursor) +{ + pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (!stmt->methods->cursor_closer) { + /* emulate it by fetching and discarding rows */ + do { + while (stmt->methods->fetcher(stmt, PDO_FETCH_ORI_NEXT, 0 TSRMLS_CC)) + ; + if (!stmt->methods->next_rowset) { + break; + } + + if (!pdo_stmt_do_next_rowset(stmt TSRMLS_CC)) { + break; + } + + } while (1); + RETURN_TRUE; + } + + PDO_STMT_CLEAR_ERR(); + + if (!stmt->methods->cursor_closer(stmt TSRMLS_CC)) { + PDO_HANDLE_STMT_ERR(); + RETURN_FALSE; + } + + RETURN_TRUE; +} +/* }}} */ + + function_entry pdo_dbstmt_functions[] = { PHP_ME(PDOStatement, execute, NULL, ZEND_ACC_PUBLIC) PHP_ME(PDOStatement, fetch, NULL, ZEND_ACC_PUBLIC) @@ -1733,6 +1780,7 @@ PHP_ME(PDOStatement, getColumnMeta, NULL, ZEND_ACC_PUBLIC) PHP_ME(PDOStatement, setFetchMode, NULL, ZEND_ACC_PUBLIC) PHP_ME(PDOStatement, nextRowset,NULL, ZEND_ACC_PUBLIC)
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
wez Fri Jul 8 11:25:16 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: Fix a shutdown order issue I saw in the pgsql driver. Hope this doesn't mess up something in the OCI driver; I think I've been here before. http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.105&r2=1.106&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.105 php-src/ext/pdo/pdo_stmt.c:1.106 --- php-src/ext/pdo/pdo_stmt.c:1.105Fri Jul 8 00:12:58 2005 +++ php-src/ext/pdo/pdo_stmt.c Fri Jul 8 11:25:15 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.105 2005/07/08 04:12:58 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.106 2005/07/08 15:25:15 wez Exp $ */ /* The PDO Statement Handle Class */ @@ -1838,6 +1838,19 @@ stmt->properties = NULL; } + if (stmt->bound_params) { + zend_hash_destroy(stmt->bound_params); + FREE_HASHTABLE(stmt->bound_params); + } + if (stmt->bound_param_map) { + zend_hash_destroy(stmt->bound_param_map); + FREE_HASHTABLE(stmt->bound_param_map); + } + if (stmt->bound_columns) { + zend_hash_destroy(stmt->bound_columns); + FREE_HASHTABLE(stmt->bound_columns); + } + if (stmt->methods && stmt->methods->dtor) { stmt->methods->dtor(stmt TSRMLS_CC); } @@ -1855,18 +1868,6 @@ efree(stmt->columns); } - if (stmt->bound_params) { - zend_hash_destroy(stmt->bound_params); - FREE_HASHTABLE(stmt->bound_params); - } - if (stmt->bound_param_map) { - zend_hash_destroy(stmt->bound_param_map); - FREE_HASHTABLE(stmt->bound_param_map); - } - if (stmt->bound_columns) { - zend_hash_destroy(stmt->bound_columns); - FREE_HASHTABLE(stmt->bound_columns); - } do_fetch_opt_finish(stmt, 1 TSRMLS_CC); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
Pointing me at some good documentation for it would help; I find the postgres site really difficult to extract information from. I've looked on two occasions but got fed up with lack of info. Interesting. I find the PostgreSQL manual elegant, simple and orthogonal and I find the MySQL one a total cross-version jumbled mess :) This is the URL you want: http://www.postgresql.org/docs/8.0/interactive/libpq-exec.html#LIBPQ-EXEC-MAIN You can use the PQprepare/PQexecPrepared combo to have separated prepare and execute steps. Or, you can use PQexecParams to simple execute a statement with separate parameters. If you can show me some C code that does it, I'll install postgres and hack up something to make it work. Just look at php-src/ext/pgsql/pgsql.c. Find the pg_prepare, pg_execute and pg_query_params function implementations. The basic thing in PostgreSQL is that it uses positional parameters: $1, $2, $3 instead of ?, ?, ? or :var1, :var2, :var3. Chris -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
Pointing me at some good documentation for it would help; I find the postgres site really difficult to extract information from. I've looked on two occasions but got fed up with lack of info. If you can show me some C code that does it, I'll install postgres and hack up something to make it work. --Wez. Christopher Kings-Lynne wrote: Wez Furlong wrote: wezThu Jul 7 08:45:41 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: Fix bug in bindColumn() for drivers that implement native prepared statements and that use the PDO rewriter to handle non-native parameter syntax. Is there any chance we can get native prepared statements in pdo_pgsql? What's involved? Chris -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
Wez Furlong wrote: wez Thu Jul 7 08:45:41 2005 EDT Modified files: /php-src/ext/pdo pdo_stmt.c Log: Fix bug in bindColumn() for drivers that implement native prepared statements and that use the PDO rewriter to handle non-native parameter syntax. Is there any chance we can get native prepared statements in pdo_pgsql? What's involved? Chris -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Thu Jul 7 11:14:12 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: Return an empty array rather then FALSE in fetchAll() on no results. http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.103&r2=1.104&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.103 php-src/ext/pdo/pdo_stmt.c:1.104 --- php-src/ext/pdo/pdo_stmt.c:1.103Thu Jul 7 08:45:40 2005 +++ php-src/ext/pdo/pdo_stmt.c Thu Jul 7 11:14:10 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.103 2005/07/07 12:45:40 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.104 2005/07/07 15:14:10 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -1293,8 +1293,7 @@ } if (!do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC)) { FREE_ZVAL(data); - zval_dtor(return_value); - error = 1; + error = 2; } } if (!error) { @@ -1320,7 +1319,12 @@ if (error) { PDO_HANDLE_STMT_ERR(); - RETURN_FALSE; + if (error != 2) { + RETURN_FALSE; + } else { /* on no results, return an empty array */ + array_init(return_value); + return; + } } } /* }}} */ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
wez Thu Jul 7 08:45:41 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: Fix bug in bindColumn() for drivers that implement native prepared statements and that use the PDO rewriter to handle non-native parameter syntax. http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.102&r2=1.103&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.102 php-src/ext/pdo/pdo_stmt.c:1.103 --- php-src/ext/pdo/pdo_stmt.c:1.102Thu Jul 7 07:19:56 2005 +++ php-src/ext/pdo/pdo_stmt.c Thu Jul 7 08:45:40 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.102 2005/07/07 11:19:56 dmitry Exp $ */ +/* $Id: pdo_stmt.c,v 1.103 2005/07/07 12:45:40 wez Exp $ */ /* The PDO Statement Handle Class */ @@ -292,7 +292,7 @@ zend_hash_index_update(hash, param->paramno, param, sizeof(*param), (void**)&pparam); } - if (!rewrite_name_to_position(stmt, pparam TSRMLS_CC)) { + if (is_param && !rewrite_name_to_position(stmt, pparam TSRMLS_CC)) { return 0; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Sat Jul 2 13:19:58 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: Fixed memory leak on PDO_FETCH_OBJ. http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.99&r2=1.100&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.99 php-src/ext/pdo/pdo_stmt.c:1.100 --- php-src/ext/pdo/pdo_stmt.c:1.99 Wed Jun 8 15:51:56 2005 +++ php-src/ext/pdo/pdo_stmt.c Sat Jul 2 13:19:58 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.99 2005/06/08 19:51:56 dmitry Exp $ */ +/* $Id: pdo_stmt.c,v 1.100 2005/07/02 17:19:58 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -851,6 +851,7 @@ zend_update_property(NULL, return_value, stmt->columns[i].name, stmt->columns[i].namelen, val TSRMLS_CC); + zval_ptr_dtor(&val); break; case PDO_FETCH_CLASS: -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
dmitry Wed Jun 8 15:51:58 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: Fixed zval_ptr_dtor(&return_value) on uninicialized zval http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.98&r2=1.99&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.98 php-src/ext/pdo/pdo_stmt.c:1.99 --- php-src/ext/pdo/pdo_stmt.c:1.98 Mon May 16 21:41:51 2005 +++ php-src/ext/pdo/pdo_stmt.c Wed Jun 8 15:51:56 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.98 2005/05/17 01:41:51 iliaa Exp $ */ +/* $Id: pdo_stmt.c,v 1.99 2005/06/08 19:51:56 dmitry Exp $ */ /* The PDO Statement Handle Class */ @@ -729,6 +729,8 @@ return 1; } + RETVAL_FALSE; + switch (how) { case PDO_FETCH_ASSOC: case PDO_FETCH_BOTH: -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo pdo_stmt.c
iliaa Tue Apr 26 23:12:18 2005 EDT Modified files: /php-src/ext/pdopdo_stmt.c Log: removed debug code. http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.96&r2=1.97&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.96 php-src/ext/pdo/pdo_stmt.c:1.97 --- php-src/ext/pdo/pdo_stmt.c:1.96 Thu Apr 21 22:40:48 2005 +++ php-src/ext/pdo/pdo_stmt.c Tue Apr 26 23:12:18 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_stmt.c,v 1.96 2005/04/22 02:40:48 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.97 2005/04/27 03:12:18 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -745,7 +745,6 @@ break; } } - fprintf(stderr, "FAIL\n"); return 0; case PDO_FETCH_OBJ: -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php