georg Wed Feb 11 02:38:44 2004 EDT
Modified files:
/php-src/ext/mysqli mysqli_api.c mysqli.c
Log:
changed first parameter in mysqli_bind_param from array to string
(as discussed on berlin db meeting)
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli_api.c?r1=1.68&r2=1.69&ty=u
Index: php-src/ext/mysqli/mysqli_api.c
diff -u php-src/ext/mysqli/mysqli_api.c:1.68 php-src/ext/mysqli/mysqli_api.c:1.69
--- php-src/ext/mysqli/mysqli_api.c:1.68 Sat Jan 31 02:51:03 2004
+++ php-src/ext/mysqli/mysqli_api.c Wed Feb 11 02:38:43 2004
@@ -15,7 +15,7 @@
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: mysqli_api.c,v 1.68 2004/01/31 07:51:03 georg Exp $
+ $Id: mysqli_api.c,v 1.69 2004/02/11 07:38:43 georg Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -68,7 +68,7 @@
}
/* }}} */
-/* {{{ proto bool mysqli_bind_param(object stmt, array types, mixed variable
[,mixed,....])
+/* {{{ proto bool mysqli_bind_param(object stmt, string types, mixed variable
[,mixed,....])
Bind variables to a prepared statement as parameters */
PHP_FUNCTION(mysqli_bind_param)
{
@@ -81,8 +81,8 @@
STMT *stmt;
zval *mysql_stmt;
MYSQL_BIND *bind;
- zval *types;
- HashPosition hpos;
+ char *types;
+ int typelen;
unsigned long rc;
/* calculate and check number of parameters */
@@ -96,7 +96,7 @@
WRONG_PARAM_COUNT;
}
- if (zend_parse_method_parameters((getThis()) ? 1:2 TSRMLS_CC, getThis(), "Oa",
&mysql_stmt, mysqli_stmt_class_entry, &types) == FAILURE) {
+ if (zend_parse_method_parameters((getThis()) ? 1:2 TSRMLS_CC, getThis(), "Os",
&mysql_stmt, mysqli_stmt_class_entry, &types, &typelen) == FAILURE) {
return;
}
@@ -106,9 +106,9 @@
start = 1;
}
- if (zend_hash_num_elements(Z_ARRVAL_P(types)) != argc - start) {
- /* number of bind variables doesn't match number of elements in array
*/
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of elements in
type array doesn't match number of bind variables");
+ if (strlen(types) != argc - start) {
+ /* number of bind variables doesn't match number of elements in type
definition string */
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of elements in
type definition string doesn't match number of bind variables");
}
/* prevent leak if variables are already bound */
@@ -126,35 +126,30 @@
stmt->param.is_null = ecalloc(num_vars, sizeof(char));
bind = (MYSQL_BIND *)ecalloc(num_vars, sizeof(MYSQL_BIND));
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(types), &hpos);
-
ofs = 0;
for (i=start; i < argc; i++) {
- zval **ctype;
-
- zend_hash_get_current_data_ex(Z_ARRVAL_P(types), (void **)&ctype,
&hpos);
/* set specified type */
- switch (Z_LVAL_PP(ctype)) {
- case MYSQLI_BIND_DOUBLE:
+ switch (types[ofs]) {
+ case 'd': /* Double */
bind[ofs].buffer_type = MYSQL_TYPE_DOUBLE;
bind[ofs].buffer = (gptr)&Z_DVAL_PP(args[i]);
bind[ofs].is_null = &stmt->param.is_null[ofs];
break;
- case MYSQLI_BIND_INT:
+ case 'i': /* Integer */
bind[ofs].buffer_type = MYSQL_TYPE_LONG;
bind[ofs].buffer = (gptr)&Z_LVAL_PP(args[i]);
bind[ofs].is_null = &stmt->param.is_null[ofs];
break;
- case MYSQLI_BIND_SEND_DATA:
+ case 'b': /* Blob (send data) */
bind[ofs].buffer_type = MYSQL_TYPE_VAR_STRING;
bind[ofs].is_null = 0;
bind[ofs].length = 0;
break;
- case MYSQLI_BIND_STRING:
+ case 's': /* string */
bind[ofs].buffer_type = MYSQL_TYPE_VAR_STRING;
bind[ofs].buffer = NULL;
bind[ofs].buffer_length = 0;
@@ -162,14 +157,13 @@
break;
default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Undefined
fieldtype %ld (parameter %d)", Z_LVAL_PP(args[i]), i+1);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Undefined
fieldtype %c (parameter %d)", types[ofs], i+1);
efree(args);
efree(bind);
RETURN_FALSE;
break;
}
ofs++;
- zend_hash_move_forward_ex(Z_ARRVAL_P(types), &hpos);
}
rc = mysql_bind_param(stmt->stmt, bind);
@@ -1267,6 +1261,8 @@
RETURN_FALSE;
}
+ if (stmt->stmt->fields) printf("**********\n");
+
mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
mysqli_resource->ptr = (void *)stmt;
MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_stmt_class_entry);
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli.c?r1=1.28&r2=1.29&ty=u
Index: php-src/ext/mysqli/mysqli.c
diff -u php-src/ext/mysqli/mysqli.c:1.28 php-src/ext/mysqli/mysqli.c:1.29
--- php-src/ext/mysqli/mysqli.c:1.28 Sat Feb 7 08:45:44 2004
+++ php-src/ext/mysqli/mysqli.c Wed Feb 11 02:38:43 2004
@@ -15,7 +15,7 @@
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: mysqli.c,v 1.28 2004/02/07 13:45:44 georg Exp $
+ $Id: mysqli.c,v 1.29 2004/02/11 07:38:43 georg Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -66,6 +66,7 @@
for (i=0; i < bbuf.var_cnt; i++) {
if (type == FETCH_RESULT) {
if (bbuf.buf[i].type == IS_STRING) {
+ printf ("--free--\n");
efree(bbuf.buf[i].buffer);
}
}
@@ -439,12 +440,6 @@
REGISTER_LONG_CONSTANT("MYSQLI_TYPE_INTERVAL", FIELD_TYPE_INTERVAL, CONST_CS |
CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("MYSQLI_TYPE_GEOMETRY", FIELD_TYPE_GEOMETRY, CONST_CS |
CONST_PERSISTENT);
- /* bindtypes for mysqli_bind_result */
- REGISTER_LONG_CONSTANT("MYSQLI_BIND_STRING", MYSQLI_BIND_STRING, CONST_CS |
CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_BIND_INT", MYSQLI_BIND_INT, CONST_CS |
CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_BIND_DOUBLE", MYSQLI_BIND_DOUBLE, CONST_CS |
CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_BIND_SEND_DATA", MYSQLI_BIND_SEND_DATA,
CONST_CS | CONST_PERSISTENT);
-
/* replication */
REGISTER_LONG_CONSTANT("MYSQLI_RPL_MASTER", MYSQL_RPL_MASTER, CONST_CS |
CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("MYSQLI_RPL_SLAVE", MYSQL_RPL_SLAVE, CONST_CS |
CONST_PERSISTENT);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php