From: Georg Richter Date: Fri, 28 Jan 2005 17:37:42 +0000 (+0000) Subject: MFH: Fix for mysql_affected_rows and mysql_stmt_affected_rows X-Git-Tag: php-5.0.4RC1~225 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4baa8ee0bc75ef1fb0924404106e1416081c39c5;p=php MFH: Fix for mysql_affected_rows and mysql_stmt_affected_rows --- diff --git a/NEWS b/NEWS index 1fee896eb9..feab8f83c6 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,8 @@ PHP NEWS - Changed foreach() to throw an exception if IteratorAggregate::getIterator() does not return an Iterator. (Marcus) - Changed phpize not to require libtool. (Jani) +- Fixed a bug in mysql_affected_rows and mysql_stmt_affected_rows when the + api function returns -1 (Georg) - Fixed several egregious leaks in ext/browscap and sapi/embed. (Andrei) - Fixed build system to always use bundled libtool files. (Jani) - Fixed a bug in mysqli_stmt_execute() (type conversion with NULL values). (Georg) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 263b362a28..e1b8341290 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -44,6 +44,9 @@ PHP_FUNCTION(mysqli_affected_rows) MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link"); rc = mysql_affected_rows(mysql->mysql); + if (rc == (my_ulonglong) -1) { + RETURN_LONG(-1); + } MYSQLI_RETURN_LONG_LONG(rc); } /* }}} */ @@ -1480,6 +1483,9 @@ PHP_FUNCTION(mysqli_stmt_affected_rows) MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt"); rc = mysql_stmt_affected_rows(stmt->stmt); + if (rc == (my_ulonglong) -1) { + RETURN_LONG(-1); + } MYSQLI_RETURN_LONG_LONG(rc) } /* }}} */ diff --git a/ext/mysqli/mysqli_prop.c b/ext/mysqli/mysqli_prop.c index 57e0606895..f073852485 100644 --- a/ext/mysqli/mysqli_prop.c +++ b/ext/mysqli/mysqli_prop.c @@ -130,9 +130,36 @@ int link_connect_error_read(mysqli_object *obj, zval **retval TSRMLS_DC) } /* }}} */ +/* {{{ property link_affected_rows_read */ +int link_affected_rows_read(mysqli_object *obj, zval **retval TSRMLS_DC) +{ + MY_MYSQL *mysql; + my_ulonglong rc; + + ALLOC_ZVAL(*retval); + CHECK_OBJECT(); + + mysql = (MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; + rc = mysql_affected_rows(mysql->mysql); + + if (rc == (my_ulonglong)-1) { + ZVAL_LONG(*retval, -1); + return SUCCESS; + } + + if (rc < LONG_MAX) { + ZVAL_LONG(*retval, rc); + } else { + char ret[40]; + sprintf(ret, "%llu", (my_ulonglong) rc); + ZVAL_STRING(*retval, ret, 1); + } + + return SUCCESS; +} +/* }}} */ /* link properties */ -MYSQLI_MAP_PROPERTY_FUNC_LONG(link_affected_rows_read, mysql_affected_rows, MYSQLI_GET_MYSQL(), my_ulonglong); MYSQLI_MAP_PROPERTY_FUNC_LONG(link_errno_read, mysql_errno, MYSQLI_GET_MYSQL(), ulong); MYSQLI_MAP_PROPERTY_FUNC_STRING(link_error_read, mysql_error, MYSQLI_GET_MYSQL()); MYSQLI_MAP_PROPERTY_FUNC_LONG(link_field_count_read, mysql_field_count, MYSQLI_GET_MYSQL(), ulong); @@ -220,7 +247,35 @@ int stmt_id_read(mysqli_object *obj, zval **retval TSRMLS_DC) } /* }}} */ -MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_affected_rows_read, mysql_stmt_affected_rows, MYSQLI_GET_STMT(), my_ulonglong); +/* {{{ property stmt_affected_rows_read */ +int stmt_affected_rows_read(mysqli_object *obj, zval **retval TSRMLS_DC) +{ + MY_STMT *stmt; + my_ulonglong rc; + + ALLOC_ZVAL(*retval); + CHECK_OBJECT(); + + stmt = (MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; + rc = mysql_stmt_affected_rows(stmt->stmt); + + if (rc == (my_ulonglong)-1) { + ZVAL_LONG(*retval, -1); + return SUCCESS; + } + + if (rc < LONG_MAX) { + ZVAL_LONG(*retval, rc); + } else { + char ret[40]; + sprintf(ret, "%llu", (my_ulonglong) rc); + ZVAL_STRING(*retval, ret, 1); + } + + return SUCCESS; +} +/* }}} */ + MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_insert_id_read, mysql_stmt_insert_id, MYSQLI_GET_STMT(), my_ulonglong); MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_num_rows_read, mysql_stmt_num_rows, MYSQLI_GET_STMT(), my_ulonglong); MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_param_count_read, mysql_stmt_param_count, MYSQLI_GET_STMT(), ulong);