summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Richter <georg@php.net>2003-02-16 12:03:37 +0000
committerGeorg Richter <georg@php.net>2003-02-16 12:03:37 +0000
commit6997d50ff0ca1314615573943e4b106446d05922 (patch)
treed1ffeeb5e61d3dd5f5ec746e3f6477e76d117da9
parent6d300baf8473cc257da6580f13269c1d48668826 (diff)
downloadphp-git-6997d50ff0ca1314615573943e4b106446d05922.tar.gz
added new function mysqli_stmt_affected_rows
added bigint support for mysqli_affected_rows fixed memleak in mysqli_prepare (stmt->is_null) fixed return type for mysqli_connect
-rw-r--r--ext/mysqli/mysqli_api.c65
-rw-r--r--ext/mysqli/mysqli_fe.c2
-rw-r--r--ext/mysqli/mysqli_nonapi.c7
-rw-r--r--ext/mysqli/php_mysqli.h1
4 files changed, 55 insertions, 20 deletions
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c
index fd86fb61bd..8d0c87408a 100644
--- a/ext/mysqli/mysqli_api.c
+++ b/ext/mysqli/mysqli_api.c
@@ -30,12 +30,14 @@
#include "php_mysqli.h"
-/* {{{ proto long mysqli_affected_rows(resource link)
+/* {{{ proto mixed mysqli_affected_rows(resource link)
*/
PHP_FUNCTION(mysqli_affected_rows)
{
- MYSQL *mysql;
- zval *mysql_link;
+ MYSQL *mysql;
+ zval *mysql_link;
+ my_ulonglong rc;
+ char ret[40];
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
@@ -43,7 +45,12 @@ PHP_FUNCTION(mysqli_affected_rows)
MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
- RETURN_LONG(mysql_affected_rows(mysql));
+ rc = mysql_affected_rows(mysql);
+ if (rc != (long)rc) {
+ sprintf((char *)&ret, "%llu", rc);
+ RETURN_STRING(ret,1);
+ }
+ RETURN_LONG(rc);
}
/* }}} */
@@ -112,7 +119,7 @@ PHP_FUNCTION(mysqli_bind_param)
efree(args);
RETURN_FALSE;
}
-
+ stmt->is_null = ecalloc(num_vars, sizeof(char));
bind = (MYSQL_BIND *)ecalloc(num_vars, sizeof(MYSQL_BIND));
for (i=start; i < num_vars * 2 + start; i+=2) {
@@ -988,14 +995,14 @@ PHP_FUNCTION(mysqli_init)
}
/* }}} */
-/* {{{ proto int mysqli_insert_id(resource link)
+/* {{{ proto mixed mysqli_insert_id(resource link)
*/
PHP_FUNCTION(mysqli_insert_id)
{
- MYSQL *mysql;
- my_ulonglong rc;
- char ret[50];
- zval *mysql_link;
+ MYSQL *mysql;
+ my_ulonglong rc;
+ char ret[50];
+ zval *mysql_link;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
@@ -1004,11 +1011,10 @@ PHP_FUNCTION(mysqli_insert_id)
rc = mysql_insert_id(mysql);
if (rc != (long)rc) {
- sprintf((char *)&ret, "%lld", rc);
+ sprintf((char *)&ret, "%llu", rc);
RETURN_STRING(ret,1);
- } else {
- RETURN_LONG(rc);
- }
+ }
+ RETURN_LONG(rc);
}
/* }}} */
@@ -1181,10 +1187,6 @@ PHP_FUNCTION(mysqli_prepare)
RETURN_FALSE;
}
- if (mysql_param_count(stmt->stmt)) {
- stmt->is_null = (char *)emalloc(mysql_param_count(stmt->stmt));
- }
-
MYSQLI_RETURN_RESOURCE(stmt, mysqli_stmt_class_entry);
}
/* }}} */
@@ -1495,9 +1497,34 @@ PHP_FUNCTION(mysqli_store_result)
}
/* }}} */
+/* {{{ proto mixed mysqli_stmt_affected_rows(object stmt)
+*/
+PHP_FUNCTION(mysqli_stmt_affected_rows)
+{
+ STMT *stmt;
+ zval *mysql_stmt;
+ my_ulonglong rc;
+ char ret[50];
+
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
+ return;
+ }
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
+
+ rc = mysql_stmt_affected_rows(stmt->stmt);
+ if (rc != (long)rc) {
+ sprintf((char *)&ret, "%llu", rc);
+ RETURN_STRING(ret, 1);
+ }
+
+ RETURN_LONG(rc);
+}
+/* }}} */
+
/* {{{ proto bool mysqli_stmt_close(resource stmt)
close statement */
-PHP_FUNCTION(mysqli_stmt_close) {
+PHP_FUNCTION(mysqli_stmt_close)
+{
STMT *stmt;
zval *mysql_stmt;
diff --git a/ext/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c
index 4d7651d970..d555e47d66 100644
--- a/ext/mysqli/mysqli_fe.c
+++ b/ext/mysqli/mysqli_fe.c
@@ -105,6 +105,7 @@ function_entry mysqli_functions[] = {
PHP_FE(mysqli_slave_query, NULL)
PHP_FE(mysqli_ssl_set, NULL)
PHP_FE(mysqli_stat, NULL)
+ PHP_FE(mysqli_stmt_affected_rows, NULL)
PHP_FE(mysqli_stmt_close, NULL)
PHP_FE(mysqli_stmt_errno, NULL)
PHP_FE(mysqli_stmt_error, NULL)
@@ -211,6 +212,7 @@ function_entry mysqli_stmt_methods[] = {
PHP_FALIAS(fetch,mysqli_fetch,NULL)
PHP_FALIAS(param_count,mysqli_param_count,NULL)
PHP_FALIAS(send_long_data,mysqli_send_long_data,NULL)
+ PHP_FALIAS(affected_rows,mysqli_stmt_affected_rows,NULL)
PHP_FALIAS(close,mysqli_stmt_close,NULL)
PHP_FALIAS(errno,mysqli_stmt_errno,NULL)
PHP_FALIAS(error,mysqli_stmt_error,NULL)
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c
index f49ce189bb..a988926173 100644
--- a/ext/mysqli/mysqli_nonapi.c
+++ b/ext/mysqli/mysqli_nonapi.c
@@ -34,6 +34,7 @@
PHP_FUNCTION(mysqli_connect)
{
MYSQL *mysql;
+ zval *object = getThis();
char *hostname = NULL, *username=NULL, *passwd=NULL, *dbname=NULL, *socket=NULL;
unsigned int hostname_len, username_len, passwd_len, dbname_len, socket_len;
unsigned int port=0;
@@ -69,7 +70,11 @@ PHP_FUNCTION(mysqli_connect)
RETURN_FALSE;
}
- MYSQLI_RETURN_RESOURCE(mysql, mysqli_link_class_entry);
+ if (!object) {
+ MYSQLI_RETURN_RESOURCE(mysql, mysqli_link_class_entry);
+ } else {
+ ((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->ptr = mysql;
+ }
}
/* }}} */
diff --git a/ext/mysqli/php_mysqli.h b/ext/mysqli/php_mysqli.h
index 1723b8f0f2..bc83ec803a 100644
--- a/ext/mysqli/php_mysqli.h
+++ b/ext/mysqli/php_mysqli.h
@@ -216,6 +216,7 @@ PHP_FUNCTION(mysqli_send_query);
PHP_FUNCTION(mysqli_slave_query);
PHP_FUNCTION(mysqli_ssl_set);
PHP_FUNCTION(mysqli_stat);
+PHP_FUNCTION(mysqli_stmt_affected_rows);
PHP_FUNCTION(mysqli_stmt_close);
PHP_FUNCTION(mysqli_stmt_errno);
PHP_FUNCTION(mysqli_stmt_error);