Re: cvs: php4 /ext/mysql php_mysql.c php_mysql.h

From: Date: Sun, 24 Mar 2002 17:55:12 +0000
Subject: Re: cvs: php4 /ext/mysql php_mysql.c php_mysql.h
References: 1  Groups: php.cvs 
Request: Send a blank email to php-cvs+get-10654@lists.php.net to get a copy of this message
Georg, Please use zend_parse_parameters the way it was intended for. Basically this means use it's own optional parameter routine and not the switch() quirks: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) return; if (NULL == mysql_link) { id = .... CHECK_LINK(id); } ZEND_FETCH_RESOURCE2( .... [...] Especially mysql_real_escape_string() doesn't look very nice. You maybe also want to add to the comment of mysql_real_escape_string() what the advantage is. - Markus On Sun, Mar 24, 2002 at 05:19:19PM -0000, Georg Richter wrote : > georg Sun Mar 24 12:19:19 2002 EDT > > Modified files: > /php4/ext/mysql php_mysql.c php_mysql.h > Log: > > a) ws fixed > b) changed mysql_list_processes, mysql_stat (zend_parse_parameters) > c) New functions: > 1) mysql_real_escape_string this function is similar to mysql_escape_string (deprecated). > it needs a mysql-connection to escape a string according to the > current character set > > 2) mysql_character_set_name returns the current character set for the connection > > 3) mysql_thread_id return the pid for the current connection. This function is usefull > when using mysql_list_processes > > > Index: php4/ext/mysql/php_mysql.c > diff -u php4/ext/mysql/php_mysql.c:1.119 php4/ext/mysql/php_mysql.c:1.120 > --- php4/ext/mysql/php_mysql.c:1.119 Sun Mar 24 05:57:40 2002 > +++ php4/ext/mysql/php_mysql.c Sun Mar 24 12:19:19 2002 > @@ -16,7 +16,7 @@ > +----------------------------------------------------------------------+ > */ > > -/* $Id: php_mysql.c,v 1.119 2002/03/24 10:57:40 zak Exp $ */ > +/* $Id: php_mysql.c,v 1.120 2002/03/24 17:19:19 georg Exp $ */ > > > /* TODO: > @@ -154,13 +154,16 @@ > PHP_FE(mysql_field_len, NULL) > PHP_FE(mysql_field_type, NULL) > PHP_FE(mysql_field_flags, NULL) > - PHP_FE(mysql_escape_string, NULL) > - PHP_FE(mysql_stat, NULL) > + PHP_FE(mysql_escape_string, NULL) > + PHP_FE(mysql_real_escape_string, NULL) > + PHP_FE(mysql_stat, NULL) > + PHP_FE(mysql_thread_id, NULL) > + PHP_FE(mysql_character_set_name, NULL) > #ifdef HAVE_GETINFO_FUNCS > - PHP_FE(mysql_get_client_info, NULL) > + PHP_FE(mysql_get_client_info, NULL) > PHP_FE(mysql_get_host_info, NULL) > - PHP_FE(mysql_get_proto_info, NULL) > - PHP_FE(mysql_get_server_info, NULL) > + PHP_FE(mysql_get_proto_info, NULL) > + PHP_FE(mysql_get_server_info, NULL) > #endif > > /* for downwards compatability */ > @@ -193,14 +196,14 @@ > zend_module_entry mysql_module_entry = { > STANDARD_MODULE_HEADER, > "mysql", > - mysql_functions, > - ZEND_MODULE_STARTUP_N(mysql), > - PHP_MSHUTDOWN(mysql), > - PHP_RINIT(mysql), > - PHP_RSHUTDOWN(mysql), > - PHP_MINFO(mysql), > - NO_VERSION_YET, > - STANDARD_MODULE_PROPERTIES > + mysql_functions, > + ZEND_MODULE_STARTUP_N(mysql), > + PHP_MSHUTDOWN(mysql), > + PHP_RINIT(mysql), > + PHP_RSHUTDOWN(mysql), > + PHP_MINFO(mysql), > + NO_VERSION_YET, > + STANDARD_MODULE_PROPERTIES > }; > /* }}} */ > > @@ -243,7 +246,7 @@ > static void _close_mysql_link(zend_rsrc_list_entry *rsrc TSRMLS_DC) > { > php_mysql_conn *link = (php_mysql_conn *)rsrc->ptr; > - void (*handler) (int); > + void (*handler) (int); > > handler = signal(SIGPIPE, SIG_IGN); > mysql_close(&link->conn); > @@ -904,14 +907,41 @@ > } > /* }}} */ > > +/* {{{ proto int mysql_thread_id([int link_identifier]) > + Returns the thread id of current connection */ > +PHP_FUNCTION(mysql_thread_id) > +{ > + zval *mysql_link = NULL; > + int id = -1; > + php_mysql_conn *mysql; > + > + switch(ZEND_NUM_ARGS()) { > + case 0: > + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); > + CHECK_LINK(id); > + break; > + case 1: > + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", > &mysql_link)==FAILURE) { > + RETURN_FALSE; > + } > + break; > + default: > + WRONG_PARAM_COUNT; > + break; > + } > + > + ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", > le_link, le_plink); > + > + RETURN_LONG(mysql_thread_id(&mysql->conn)); > +} > +/* }}} */ > + > /* {{{ proto string mysql_stat([int link_identifier]) > - Returns a string containing status information */ > + Returns a string containing status information */ > PHP_FUNCTION(mysql_stat) > { > - zval **mysql_link; > - char *stat; > - char *key, *val; > - int id; > + zval *mysql_link = NULL; > + int id = -1; > php_mysql_conn *mysql; > > switch(ZEND_NUM_ARGS()) { > @@ -920,29 +950,52 @@ > CHECK_LINK(id); > break; > case 1: > - if (zend_get_parameters_ex(1,&mysql_link)==FAILURE) { > + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", > &mysql_link)==FAILURE) { > RETURN_FALSE; > } > - id = -1; > break; > default: > WRONG_PARAM_COUNT; > break; > } > > - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", > le_link, le_plink); > + ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", > le_link, le_plink); > + > + RETURN_STRING(mysql_stat(&mysql->conn), 1); > +} > +/* }}} */ > > - stat = mysql_stat(&mysql->conn); > +/* {{{ proto string mysql_character_set_name([int link_identifier]) > + Returns the default character set for the current connection */ > +PHP_FUNCTION(mysql_character_set_name) > +{ > + zval *mysql_link; > + int id = -1; > + php_mysql_conn *mysql; > > - // split string in array > - if (array_init(return_value) == FAILURE) { > - RETURN_FALSE; > + switch(ZEND_NUM_ARGS()) { > + case 0: > + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); > + CHECK_LINK(id); > + break; > + case 1: > + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, > "r",&mysql_link)==FAILURE) { > + RETURN_FALSE; > + } > + id = -1; > + break; > + default: > + WRONG_PARAM_COUNT; > + break; > } > > - RETURN_STRING(stat, 1); > + ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", > le_link, le_plink); > + > + RETURN_STRING((char *)mysql_character_set_name(&mysql->conn), 1); > } > /* }}} */ > > + > #endif > > #if MYSQL_VERSION_ID < 40000 > @@ -1291,11 +1344,11 @@ > /* }}} */ > > /* {{{ proto resource mysql_list_processes([int link_identifier]) > - Returns a result set describing the current server threads */ > + Returns a result set describing the current server threads */ > PHP_FUNCTION(mysql_list_processes) > { > - zval **mysql_link; > - int id; > + zval *mysql_link; > + int id = -1; > php_mysql_conn *mysql; > MYSQL_RES *mysql_result; > > @@ -1305,17 +1358,16 @@ > CHECK_LINK(id); > break; > case 1: > - if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) { > + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, > "r",&mysql_link)==FAILURE) { > RETURN_FALSE; > } > - id = -1; > break; > default: > WRONG_PARAM_COUNT; > break; > } > > - ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", > le_link, le_plink); > + ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", > le_link, le_plink); > > if ((mysql_result=mysql_list_processes(&mysql->conn))==NULL) { > php_error(E_WARNING, "Unable to save MySQL query result"); > @@ -1455,6 +1507,43 @@ > } > /* }}} */ > > +/* {{{ proto string mysql_real_escape_string(string to_be_escaped, [int link_identifier]) > + Escape string for mysql_query */ > +PHP_FUNCTION(mysql_real_escape_string) > +{ > + zval *mysql_link = NULL; > + char *str; > + int id = -1, str_len; > + php_mysql_conn *mysql; > + switch(ZEND_NUM_ARGS()) > + { > + case 1: > + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",&str, > &str_len)==FAILURE) { > + RETURN_FALSE; > + } > + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); > + CHECK_LINK(id); > + break; > + case 2: > + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sr",&str, &str_len, > &mysql_link)==FAILURE) { > + RETURN_FALSE; > + } > + break; > + default: > + WRONG_PARAM_COUNT; > + break; > + } > + > + ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", > le_link, le_plink); > + > + /* the maximum size of the new string is 2x the length of the > + * original string (every chas to be scaped) > + */ > + Z_STRVAL_P(return_value) = (char *)emalloc(str_len * 2 + 1); // one extra byte for > '\0' > + Z_STRLEN_P(return_value) = mysql_real_escape_string(&mysql->conn, > Z_STRVAL_P(return_value), str, str_len); > + Z_TYPE_P(return_value) = IS_STRING; > +} > +/* }}} */ > > /* {{{ proto int mysql_insert_id([int link_identifier]) > Gets the ID generated from the previous INSERT operation */ > Index: php4/ext/mysql/php_mysql.h > diff -u php4/ext/mysql/php_mysql.h:1.27 php4/ext/mysql/php_mysql.h:1.28 > --- php4/ext/mysql/php_mysql.h:1.27 Sun Mar 24 05:57:40 2002 > +++ php4/ext/mysql/php_mysql.h Sun Mar 24 12:19:19 2002 > @@ -17,7 +17,7 @@ > */ > > > -/* $Id: php_mysql.h,v 1.27 2002/03/24 10:57:40 zak Exp $ */ > +/* $Id: php_mysql.h,v 1.28 2002/03/24 17:19:19 georg Exp $ */ > > #ifndef PHP_MYSQL_H > #define PHP_MYSQL_H > @@ -81,11 +81,14 @@ > PHP_FUNCTION(mysql_field_type); > PHP_FUNCTION(mysql_field_flags); > PHP_FUNCTION(mysql_escape_string); > +PHP_FUNCTION(mysql_real_escape_string); > PHP_FUNCTION(mysql_get_client_info); > PHP_FUNCTION(mysql_get_host_info); > PHP_FUNCTION(mysql_get_proto_info); > PHP_FUNCTION(mysql_get_server_info); > PHP_FUNCTION(mysql_stat); > +PHP_FUNCTION(mysql_thread_id); > +PHP_FUNCTION(mysql_character_set_name); > > ZEND_BEGIN_MODULE_GLOBALS(mysql) > long default_link; > > > > -- > PHP CVS Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php -- Please always Cc to me when replying to me on the lists. GnuPG Key: http://guru.josefine.at/~mfischer/C2272BD0.asc

« previous php.cvs (#10654) next »