summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Richter <georg@php.net>2005-01-28 17:35:37 +0000
committerGeorg Richter <georg@php.net>2005-01-28 17:35:37 +0000
commit32aaa6a7bee6181f2f899afb9b98f4acb4e1f16f (patch)
tree924def621b5c84c65b275fa94673c97321c1bd03
parent999c63d9d715ed34cfe0a79084bbb1372764b59a (diff)
downloadphp-git-32aaa6a7bee6181f2f899afb9b98f4acb4e1f16f.tar.gz
fixed a bug in mysql_affected_rows and mysql_stmt_affected_rows
in case affected_rows function returns (my_ulonglong) -1 for errors. (Thanks to Antony Dovgal for reporting this bug)
-rw-r--r--ext/mysqli/mysqli_api.c6
-rw-r--r--ext/mysqli/mysqli_prop.c59
2 files changed, 63 insertions, 2 deletions
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c
index 132456837a..86354d15df 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);
}
/* }}} */
@@ -1445,6 +1448,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 53c392f06b..e0b2a18c9c 100644
--- a/ext/mysqli/mysqli_prop.c
+++ b/ext/mysqli/mysqli_prop.c
@@ -128,9 +128,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);
@@ -216,7 +243,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);