diff options
author | Georg Richter <georg@php.net> | 2003-02-16 12:03:37 +0000 |
---|---|---|
committer | Georg Richter <georg@php.net> | 2003-02-16 12:03:37 +0000 |
commit | 6997d50ff0ca1314615573943e4b106446d05922 (patch) | |
tree | d1ffeeb5e61d3dd5f5ec746e3f6477e76d117da9 | |
parent | 6d300baf8473cc257da6580f13269c1d48668826 (diff) | |
download | php-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.c | 65 | ||||
-rw-r--r-- | ext/mysqli/mysqli_fe.c | 2 | ||||
-rw-r--r-- | ext/mysqli/mysqli_nonapi.c | 7 | ||||
-rw-r--r-- | ext/mysqli/php_mysqli.h | 1 |
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); |