]> granicus.if.org Git - php/commitdiff
MFH: Fix for mysql_affected_rows and mysql_stmt_affected_rows
authorGeorg Richter <georg@php.net>
Fri, 28 Jan 2005 17:37:42 +0000 (17:37 +0000)
committerGeorg Richter <georg@php.net>
Fri, 28 Jan 2005 17:37:42 +0000 (17:37 +0000)
NEWS
ext/mysqli/mysqli_api.c
ext/mysqli/mysqli_prop.c

diff --git a/NEWS b/NEWS
index 1fee896eb943f11fd32d3e00c8307f5a4a0d2737..feab8f83c68d1f7bce4211cb4a6e10a41e17bf14 100644 (file)
--- 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)
index 263b362a28f9cfae5658f44d244576e6db22e48f..e1b8341290968462656255b5fe912a364b7be5cd 100644 (file)
@@ -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)
 }
 /* }}} */
index 57e0606895c28193c7016ec7c4713ca5866370e0..f0738524859b90350891c6f05ce7ba4b45f3d4f5 100644 (file)
@@ -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);