]> granicus.if.org Git - php/commitdiff
added new function mysqli_stmt_affected_rows
authorGeorg Richter <georg@php.net>
Sun, 16 Feb 2003 12:03:37 +0000 (12:03 +0000)
committerGeorg Richter <georg@php.net>
Sun, 16 Feb 2003 12:03:37 +0000 (12:03 +0000)
added bigint support for mysqli_affected_rows
fixed memleak in mysqli_prepare (stmt->is_null)
fixed return type for mysqli_connect

ext/mysqli/mysqli_api.c
ext/mysqli/mysqli_fe.c
ext/mysqli/mysqli_nonapi.c
ext/mysqli/php_mysqli.h

index fd86fb61bdaae97b9817b75a4fb6005a274280c6..8d0c87408ae70f2757abc9a01a3103e2bf8212fd 100644 (file)
 #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;
 
index 4d7651d9701cbdd504f3103568851cccd007687b..d555e47d66ed5439b9d44635abf0f599f1899931 100644 (file)
@@ -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)
index f49ce189bb5f4b7f1fb23b3fe529a4763f4e3ea2..a9889261738a70563078bb51bceddc631088773c 100644 (file)
@@ -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;
+       }
 }
 /* }}} */
 
index 1723b8f0f22ca79be3c85ca29853faa064ea10ed..bc83ec803adcb87b7b54604806740f256cd4fd33 100644 (file)
@@ -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);