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