georg Sun Dec 26 08:16:40 2004 EDT Added files: /php-src/ext/mysqli/tests 062.phpt 063.phpt
Modified files: /php-src/ext/mysqli mysqli.c php_mysqli.h Log: added constructors for mysqli_stmt and mysqli_result classes http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli.c?r1=1.56&r2=1.57&ty=u Index: php-src/ext/mysqli/mysqli.c diff -u php-src/ext/mysqli/mysqli.c:1.56 php-src/ext/mysqli/mysqli.c:1.57 --- php-src/ext/mysqli/mysqli.c:1.56 Sat Dec 25 11:42:53 2004 +++ php-src/ext/mysqli/mysqli.c Sun Dec 26 08:16:38 2004 @@ -15,7 +15,7 @@ | Author: Georg Richter <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: mysqli.c,v 1.56 2004/12/25 16:42:53 georg Exp $ + $Id: mysqli.c,v 1.57 2004/12/26 13:16:38 georg Exp $ */ #ifdef HAVE_CONFIG_H @@ -281,23 +281,31 @@ { mysqli_object *obj = (mysqli_object *)zend_objects_get_address(object TSRMLS_CC); - if (obj->zo.ce != mysqli_link_class_entry) { + if (obj->zo.ce != mysqli_link_class_entry && obj->zo.ce != mysqli_stmt_class_entry && + obj->zo.ce != mysqli_result_class_entry) { return obj->zo.ce->constructor; } else { static zend_internal_function f; - f.function_name = mysqli_link_class_entry->name; - f.scope = mysqli_link_class_entry; + f.function_name = obj->zo.ce->name; + f.scope = obj->zo.ce; f.arg_info = NULL; f.num_args = 0; f.fn_flags = 0; f.type = ZEND_INTERNAL_FUNCTION; - f.handler = ZEND_FN(mysqli_connect); + if (obj->zo.ce == mysqli_link_class_entry) { + f.handler = ZEND_FN(mysqli_connect); + } else if (obj->zo.ce == mysqli_stmt_class_entry) { + f.handler = ZEND_FN(mysqli_stmt_construct); + } else if (obj->zo.ce == mysqli_result_class_entry) { + f.handler = ZEND_FN(mysqli_result_construct); + } return (union _zend_function*)&f; } } + /* {{{ mysqli_objects_new */ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry *class_type TSRMLS_DC) @@ -578,6 +586,109 @@ } /* }}} */ +/* {{{ mixed mysqli_stmt_construct() +constructor for statement object. +Parameters: + object -> mysqli_init + object, query -> mysqli_prepare +*/ +ZEND_FUNCTION(mysqli_stmt_construct) +{ + MY_MYSQL *mysql; + zval **mysql_link, **statement; + MY_STMT *stmt; + MYSQLI_RESOURCE *mysqli_resource; + + switch (ZEND_NUM_ARGS()) + { + case 1: /* mysql_stmt_init */ + if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) { + return; + } + MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, mysql_link, "mysqli_link"); + + stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT)); + + stmt->stmt = mysql_stmt_init(mysql->mysql); + break; + case 2: + if (zend_get_parameters_ex(2, &mysql_link, &statement)==FAILURE) { + return; + } + MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, mysql_link, "mysqli_link"); + convert_to_string_ex(statement); + + stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT)); + + if ((stmt->stmt = mysql_stmt_init(mysql->mysql))) { + mysql_stmt_prepare(stmt->stmt, Z_STRVAL_PP(statement), strlen(Z_STRVAL_PP(statement))); + } + break; + default: + WRONG_PARAM_COUNT; + break; + } + + if (!stmt->stmt) { + efree(stmt); + RETURN_FALSE; + } + + mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); + mysqli_resource->ptr = (void *)stmt; + + ((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->ptr = mysqli_resource; + ((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->valid = 1; +} +/* }}} */ + +/* {{{ mixed mysqli_result_construct() +constructor for result object. +Parameters: + object [, mode] -> mysqli_store/use_result +*/ +ZEND_FUNCTION(mysqli_result_construct) +{ + MY_MYSQL *mysql; + MYSQL_RES *result; + zval **mysql_link, **mode; + MYSQLI_RESOURCE *mysqli_resource; + int resmode = MYSQLI_STORE_RESULT; + + switch (ZEND_NUM_ARGS()) { + case 1: + if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) { + return; + } + break; + case 2: + if (zend_get_parameters_ex(2, &mysql_link, &mode)==FAILURE) { + return; + } + resmode = Z_LVAL_PP(mode); + break; + default: + WRONG_PARAM_COUNT; + } + + MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, mysql_link, "mysqli_link"); + + result = (resmode == MYSQLI_STORE_RESULT) ? mysql_store_result(mysql->mysql) : + mysql_use_result(mysql->mysql); + + if (!result) { + RETURN_FALSE; + } + + mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); + mysqli_resource->ptr = (void *)result; + + ((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->ptr = mysqli_resource; + ((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->valid = 1; + +} +/* }}} */ + /* {{{ php_mysqli_fetch_into_hash */ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags, int into_object) http://cvs.php.net/diff.php/php-src/ext/mysqli/php_mysqli.h?r1=1.40&r2=1.41&ty=u Index: php-src/ext/mysqli/php_mysqli.h diff -u php-src/ext/mysqli/php_mysqli.h:1.40 php-src/ext/mysqli/php_mysqli.h:1.41 --- php-src/ext/mysqli/php_mysqli.h:1.40 Thu Sep 2 00:53:01 2004 +++ php-src/ext/mysqli/php_mysqli.h Sun Dec 26 08:16:38 2004 @@ -15,7 +15,7 @@ | Author: Georg Richter <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: php_mysqli.h,v 1.40 2004/09/02 04:53:01 georg Exp $ + $Id: php_mysqli.h,v 1.41 2004/12/26 13:16:38 georg Exp $ */ /* A little hack to prevent build break, when mysql is used together with @@ -372,6 +372,9 @@ PHP_FUNCTION(mysqli_use_result); PHP_FUNCTION(mysqli_warning_count); +ZEND_FUNCTION(mysqli_stmt_construct); +ZEND_FUNCTION(mysqli_result_construct); + ZEND_BEGIN_MODULE_GLOBALS(mysqli) long default_link; long num_links; http://cvs.php.net/co.php/php-src/ext/mysqli/tests/062.phpt?r=1.1&p=1 Index: php-src/ext/mysqli/tests/062.phpt +++ php-src/ext/mysqli/tests/062.phpt --TEST-- resultset constructor --SKIPIF-- <?php require_once('skipif.inc'); ?> --FILE-- <?php include "connect.inc"; $mysql = new mysqli($host, $user, $passwd); $mysql->real_query("SELECT 'foo' FROM DUAL"); $myresult = new mysqli_result($mysql); $row = $myresult->fetch_row(); $myresult->close(); $mysql->close(); var_dump($row); ?> --EXPECT-- array(1) { [0]=> string(3) "foo" } http://cvs.php.net/co.php/php-src/ext/mysqli/tests/063.phpt?r=1.1&p=1 Index: php-src/ext/mysqli/tests/063.phpt +++ php-src/ext/mysqli/tests/063.phpt --TEST-- resultset constructor --SKIPIF-- <?php require_once('skipif.inc'); ?> --FILE-- <?php include "connect.inc"; $mysql = new mysqli($host, $user, $passwd); $stmt = new mysqli_stmt($mysql, "SELECT 'foo' FROM DUAL"); $stmt->execute(); $stmt->bind_result($foo); $stmt->fetch(); $stmt->close(); $mysql->close(); var_dump($foo); ?> --EXPECT-- string(3) "foo" -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php