CVS update: php31/ext/mysql

From: Date: Sat, 17 Oct 1998 20:45:35 +0000
Subject: CVS update: php31/ext/mysql
Groups: php.dev 
Request: Send a blank email to php-dev+get-1877@lists.php.net to get a copy of this message
Date: Saturday October 17, 1998 @ 16:45 Author: shane Update of /repository/php31/ext/mysql In directory asf:/u2/tmp/cvs-serv29817/ext/mysql Modified Files: mysql.c mysql.dsp php3_mysql.h Log Message: fixes to get 3.1 compiling again under windows. mysql ported from 3.0 then backported to 3.0 Some project file updates porting other extensions from 3.0 in process. fixes to registry functions to support binary Index: php31/ext/mysql/mysql.c diff -c php31/ext/mysql/mysql.c:2.14 php31/ext/mysql/mysql.c:2.15 *** php31/ext/mysql/mysql.c:2.14 Mon Oct 5 11:12:14 1998 --- php31/ext/mysql/mysql.c Sat Oct 17 16:45:34 1998 *************** *** 27,33 **** +----------------------------------------------------------------------+ */ ! /* $Id: mysql.c,v 2.14 1998/10/05 15:12:14 zeev Exp $ */ /* TODO: --- 27,33 ---- +----------------------------------------------------------------------+ */ ! /* $Id: mysql.c,v 2.15 1998/10/17 20:45:34 shane Exp $ */ /* TODO: *************** *** 36,48 **** */ #define IS_EXT_MODULE ! #if defined(THREAD_SAFE) ! #include "tls.h" ! DWORD MySQLTls; ! static int numthreads=0; ! void *mysql_mutex; #endif #if WIN32|WINNT #include <winsock.h> #else --- 36,58 ---- */ #define IS_EXT_MODULE ! #ifdef THREAD_SAFE ! # ifndef PHP_31 ! # undef THREAD_SAFE /*no need in 3.0*/ ! # else ! # include "tls.h" ! DWORD MySQLTls; ! static int numthreads=0; ! void *mysql_mutex; ! # endif #endif + #if defined(COMPILE_DL) && !defined(PHP_31) + # include "dl/phpdl.h" + #else + # include "../phpdl.h" + #endif + #if WIN32|WINNT #include <winsock.h> #else *************** *** 58,68 **** #include "php.h" #include "internal_functions.h" ! #include "ext/standard/php3_string.h" ! #include "php3_mysql.h" ! #if HAVE_SIGNAL_H ! #include <signal.h> #endif #if HAVE_MYSQL #include <mysql.h> #ifdef HAVE_MYSQL_REAL_CONNECT --- 68,80 ---- #include "php.h" #include "internal_functions.h" ! #if PHP_31 ! # include "ext/standard/php3_string.h" ! #else ! # include "php3_string.h" #endif + #include "php3_mysql.h" + #if HAVE_MYSQL #include <mysql.h> #ifdef HAVE_MYSQL_REAL_CONNECT *************** *** 72,92 **** #endif #include "php3_list.h" - #ifdef COMPILE_DL - #ifdef DLEXPORT - #undef DLEXPORT - #endif - #include "../phpdl.h" - #endif - #define SAFE_STRING(s) ((s)?(s):"") ! #if WIN32|WINNT ! # define SIGNAL(s, h) NULL #else ! # define SIGNAL(s, h) signal(s, h) #endif function_entry mysql_functions[] = { {"mysql_connect", php3_mysql_connect, NULL}, {"mysql_pconnect", php3_mysql_pconnect, NULL}, --- 84,98 ---- #endif #include "php3_list.h" #define SAFE_STRING(s) ((s)?(s):"") ! #if MYSQL_VERSION_ID > 32199 ! #define mysql_row_length_type unsigned long #else ! #define mysql_row_length_type unsigned int #endif + function_entry mysql_functions[] = { {"mysql_connect", php3_mysql_connect, NULL}, {"mysql_pconnect", php3_mysql_pconnect, NULL}, *************** *** 149,162 **** #ifdef COMPILE_DL DLEXPORT php3_module_entry *get_module(void) { return &mysql_module_entry; } - #if WIN32|WINNT - BOOL WINAPI DllMain(HANDLE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved) - { - return 1; - } #endif #endif #if defined(THREAD_SAFE) --- 155,164 ---- #ifdef COMPILE_DL DLEXPORT php3_module_entry *get_module(void) { return &mysql_module_entry; } #endif + + #if APACHE + extern void timeout(int sig); #endif #if defined(THREAD_SAFE) *************** *** 165,174 **** }mysql_global_struct; #define MySQL_GLOBAL(a) mysql_globals->a ! ! #define MySQL_TLS_VARS \ ! mysql_global_struct *mysql_globals; \ ! mysql_globals=TlsGetValue(MySQLTls); #else #define MySQL_GLOBAL(a) a --- 167,173 ---- }mysql_global_struct; #define MySQL_GLOBAL(a) mysql_globals->a ! #define MySQL_TLS_VARS mysql_global_struct *mysql_globals=TlsGetValue(MySQLTls); #else #define MySQL_GLOBAL(a) a *************** *** 178,204 **** #define CHECK_LINK(link) { if (link==-1) { php3_error(E_WARNING,"MySQL: A link to the server could not be established"); RETURN_FALSE; } } static void _close_mysql_link(MYSQL *link) { void (*handler) (int); MySQL_TLS_VARS; - handler = SIGNAL(SIGPIPE, SIG_IGN); /* Just to be safe */ mysql_close(link); ! SIGNAL(SIGPIPE,handler); efree(link); MySQL_GLOBAL(php3_mysql_module).num_links--; } static void _close_mysql_plink(MYSQL *link) { void (*handler) (int); MySQL_TLS_VARS; ! handler = SIGNAL(SIGPIPE, SIG_IGN); /* Just to be safe */ mysql_close(link); - SIGNAL(SIGPIPE,handler); free(link); MySQL_GLOBAL(php3_mysql_module).num_persistent--; MySQL_GLOBAL(php3_mysql_module).num_links--; --- 177,228 ---- #define CHECK_LINK(link) { if (link==-1) { php3_error(E_WARNING,"MySQL: A link to the server could not be established"); RETURN_FALSE; } } + /* NOTE Don't ask me why, but soon as I made this the list + * destructor, I stoped getting access violations in windows + * with mysql 3.22.7a + */ + static void _free_mysql_result(MYSQL_RES *mysql_result){ + mysql_free_result(mysql_result); + } + static void _close_mysql_link(MYSQL *link) { + #if APACHE void (*handler) (int); + #endif MySQL_TLS_VARS; + + #if APACHE + handler = signal(SIGPIPE, SIG_IGN); + #endif mysql_close(link); ! ! #if APACHE ! signal(SIGPIPE,handler); ! #endif ! efree(link); MySQL_GLOBAL(php3_mysql_module).num_links--; } static void _close_mysql_plink(MYSQL *link) { + #if APACHE void (*handler) (int); + #endif MySQL_TLS_VARS; ! #if APACHE ! handler = signal(SIGPIPE, SIG_IGN); ! #endif ! mysql_close(link); + #if APACHE + signal(SIGPIPE,handler); + #endif + free(link); MySQL_GLOBAL(php3_mysql_module).num_persistent--; MySQL_GLOBAL(php3_mysql_module).num_links--; *************** *** 263,271 **** MySQL_GLOBAL(php3_mysql_module).default_port = MYSQL_PORT; #endif } - MySQL_GLOBAL(php3_mysql_module).num_persistent=0; ! MySQL_GLOBAL(php3_mysql_module).le_result = register_list_destructors(mysql_free_result,NULL); MySQL_GLOBAL(php3_mysql_module).le_link = register_list_destructors(_close_mysql_link,NULL); MySQL_GLOBAL(php3_mysql_module).le_plink = register_list_destructors(NULL,_close_mysql_plink); --- 287,294 ---- MySQL_GLOBAL(php3_mysql_module).default_port = MYSQL_PORT; #endif } MySQL_GLOBAL(php3_mysql_module).num_persistent=0; ! MySQL_GLOBAL(php3_mysql_module).le_result = register_list_destructors(_free_mysql_result,NULL); MySQL_GLOBAL(php3_mysql_module).le_link = register_list_destructors(_close_mysql_link,NULL); MySQL_GLOBAL(php3_mysql_module).le_plink = register_list_destructors(NULL,_close_mysql_plink); *************** *** 284,290 **** PHP3_TLS_THREAD_FREE(mysql_globals); PHP3_MUTEX_LOCK(mysql_mutex); numthreads--; ! if (!numthreads) { PHP3_TLS_PROC_SHUTDOWN(MySQLTls); PHP3_MUTEX_UNLOCK(mysql_mutex); PHP3_MUTEX_FREE(mysql_mutex); --- 307,313 ---- PHP3_TLS_THREAD_FREE(mysql_globals); PHP3_MUTEX_LOCK(mysql_mutex); numthreads--; ! if (numthreads<1) { PHP3_TLS_PROC_SHUTDOWN(MySQLTls); PHP3_MUTEX_UNLOCK(mysql_mutex); PHP3_MUTEX_FREE(mysql_mutex); *************** *** 327,354 **** "<tr><td>Persistent links:</td><td>%d/%s</td></tr>\n" "<tr><td>Total links:</td><td>%d/%s</td></tr>\n" "<tr><td>Client API version:</td><td>%s</td></tr>\n" "</table>\n", (MySQL_GLOBAL(php3_mysql_module).allow_persistent?"Yes":"No"), MySQL_GLOBAL(php3_mysql_module).num_persistent,maxp, MySQL_GLOBAL(php3_mysql_module).num_links,maxl, mysql_get_client_info() ); } static void php3_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent) { void (*handler) (int); char *user,*passwd,*host,*tmp; char *hashed_details; ! int hashed_details_length; MYSQL *mysql; - int sql_safe_mode=0; MySQL_TLS_VARS; - - cfg_get_long("mysql.allow_persistent",&sql_safe_mode); ! if (sql_safe_mode) { if (ARG_COUNT(ht)>0) { php3_error(E_NOTICE,"SQL safe mode in effect - ignoring host/user/password information"); } --- 350,387 ---- "<tr><td>Persistent links:</td><td>%d/%s</td></tr>\n" "<tr><td>Total links:</td><td>%d/%s</td></tr>\n" "<tr><td>Client API version:</td><td>%s</td></tr>\n" + #if !(WIN32|WINNT) + "<tr><td valign=\"top\">Compilation definitions:</td><td>" + "<tt>MYSQL_INCLUDE=%s<br>\n" + "MYSQL_LFLAGS=%s<br>\n" + "MYSQL_LIBS=%s<br></tt></td></tr>" + #endif "</table>\n", (MySQL_GLOBAL(php3_mysql_module).allow_persistent?"Yes":"No"), MySQL_GLOBAL(php3_mysql_module).num_persistent,maxp, MySQL_GLOBAL(php3_mysql_module).num_links,maxl, mysql_get_client_info() + #if !(WIN32|WINNT) + ,PHP_MYSQL_INCLUDE,PHP_MYSQL_LFLAGS,PHP_MYSQL_LIBS + #endif ); } static void php3_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent) { + #if APACHE void (*handler) (int); + #endif char *user,*passwd,*host,*tmp; char *hashed_details; ! int hashed_details_length,port; MYSQL *mysql; MySQL_TLS_VARS; ! /*FIXME need to deal with php3_ini, not available in external modules*/ ! #ifndef PHP_31 ! if (php3_ini.sql_safe_mode) { if (ARG_COUNT(ht)>0) { php3_error(E_NOTICE,"SQL safe mode in effect - ignoring host/user/password information"); } *************** *** 357,363 **** hashed_details_length = strlen(user)+5+3; hashed_details = (char *) emalloc(hashed_details_length+1); sprintf(hashed_details,"mysql__%s_",user); ! } else { host = MySQL_GLOBAL(php3_mysql_module).default_host; user = MySQL_GLOBAL(php3_mysql_module).default_user; passwd = MySQL_GLOBAL(php3_mysql_module).default_password; --- 390,398 ---- hashed_details_length = strlen(user)+5+3; hashed_details = (char *) emalloc(hashed_details_length+1); sprintf(hashed_details,"mysql__%s_",user); ! } else ! #endif ! { host = MySQL_GLOBAL(php3_mysql_module).default_host; user = MySQL_GLOBAL(php3_mysql_module).default_user; passwd = MySQL_GLOBAL(php3_mysql_module).default_password; *************** *** 409,425 **** hashed_details = (char *) emalloc(hashed_details_length+1); sprintf(hashed_details,"mysql_%s_%s_%s",SAFE_STRING(host), SAFE_STRING(user), SAFE_STRING(passwd)); } - ! /* FIXME this causes an access violation in windows */ ! #if !(WIN32|WINNT) if (host && (tmp=strchr(host,':'))) { *tmp=0; tmp++; ! mysql_port = atoi(tmp); } else { ! mysql_port = MySQL_GLOBAL(php3_mysql_module).default_port; } #endif if (!MySQL_GLOBAL(php3_mysql_module).allow_persistent) { --- 444,463 ---- hashed_details = (char *) emalloc(hashed_details_length+1); sprintf(hashed_details,"mysql_%s_%s_%s",SAFE_STRING(host), SAFE_STRING(user), SAFE_STRING(passwd)); } ! /* We cannot use mysql_port anymore in windows, need to use ! * mysql_real_connect() to set the port. ! */ if (host && (tmp=strchr(host,':'))) { *tmp=0; tmp++; ! port = atoi(tmp); } else { ! port = MySQL_GLOBAL(php3_mysql_module).default_port; } + + #if MYSQL_VERSION_ID < 32200 + mysql_port = port; #endif if (!MySQL_GLOBAL(php3_mysql_module).allow_persistent) { *************** *** 443,450 **** RETURN_FALSE; } /* create the link */ ! mysql = (MYSQL *) malloc(sizeof(MYSQL)); ! if (mysql_connect(mysql,host,user,passwd)==NULL) { php3_error(E_WARNING,mysql_error(mysql)); free(mysql); efree(hashed_details); --- 481,493 ---- RETURN_FALSE; } /* create the link */ ! mysql = (MYSQL *) malloc(sizeof(MYSQL)); ! #if MYSQL_VERSION_ID > 32199 /* this lets us set the port number */ ! mysql_init(mysql); ! if (mysql_real_connect(mysql,host,user,passwd,NULL,port,NULL,0)==NULL) { ! #else ! if (mysql_connect(mysql,host,user,passwd)==NULL) { ! #endif php3_error(E_WARNING,mysql_error(mysql)); free(mysql); efree(hashed_details); *************** *** 466,487 **** RETURN_FALSE; } /* ensure that the link did not die */ ! handler = SIGNAL(SIGPIPE,SIG_IGN); #if defined(mysql_errno) && defined(CR_SERVER_GONE_ERROR) mysql_stat(le->ptr); if (mysql_errno((MYSQL *)le->ptr) == CR_SERVER_GONE_ERROR) { #else if (!strcasecmp(mysql_stat(le->ptr),"mysql server has gone away")) { /* the link died */ #endif ! SIGNAL(SIGPIPE,handler); if (mysql_connect(le->ptr,host,user,passwd)==NULL) { php3_error(E_WARNING,"MySQL: Link to server lost, unable to reconnect"); _php3_hash_del(plist, hashed_details, hashed_details_length+1); efree(hashed_details); RETURN_FALSE; } } ! SIGNAL(SIGPIPE,handler); mysql = (MYSQL *) le->ptr; } return_value->value.lval = php3_list_insert(mysql,MySQL_GLOBAL(php3_mysql_module).le_plink); --- 509,540 ---- RETURN_FALSE; } /* ensure that the link did not die */ ! #if APACHE ! handler=signal(SIGPIPE,SIG_IGN); ! #endif #if defined(mysql_errno) && defined(CR_SERVER_GONE_ERROR) mysql_stat(le->ptr); if (mysql_errno((MYSQL *)le->ptr) == CR_SERVER_GONE_ERROR) { #else if (!strcasecmp(mysql_stat(le->ptr),"mysql server has gone away")) { /* the link died */ + #endif + #if APACHE + signal(SIGPIPE,handler); #endif ! #if MYSQL_VERSION_ID > 32199 /* this lets us set the port number */ ! if (mysql_real_connect(le->ptr,host,user,passwd,NULL,port,NULL,0)==NULL) { ! #else if (mysql_connect(le->ptr,host,user,passwd)==NULL) { + #endif php3_error(E_WARNING,"MySQL: Link to server lost, unable to reconnect"); _php3_hash_del(plist, hashed_details, hashed_details_length+1); efree(hashed_details); RETURN_FALSE; } } ! #if APACHE ! signal(SIGPIPE,handler); ! #endif mysql = (MYSQL *) le->ptr; } return_value->value.lval = php3_list_insert(mysql,MySQL_GLOBAL(php3_mysql_module).le_plink); *************** *** 521,529 **** efree(hashed_details); RETURN_FALSE; } mysql = (MYSQL *) emalloc(sizeof(MYSQL)); if (mysql_connect(mysql,host,user,passwd)==NULL) { ! php3_error(E_WARNING,mysql_error(mysql)); efree(hashed_details); efree(mysql); RETURN_FALSE; --- 574,588 ---- efree(hashed_details); RETURN_FALSE; } + mysql = (MYSQL *) emalloc(sizeof(MYSQL)); + #if MYSQL_VERSION_ID > 32199 /* this lets us set the port number */ + mysql_init(mysql); + if (mysql_real_connect(mysql,host,user,passwd,NULL,port,NULL,0)==NULL) { + #else if (mysql_connect(mysql,host,user,passwd)==NULL) { ! #endif ! php3_error(E_WARNING,"MySQL Connection Failed: %s\n",mysql_error(mysql)); efree(hashed_details); efree(mysql); RETURN_FALSE; *************** *** 532,538 **** /* add it to the list */ return_value->value.lval = php3_list_insert(mysql,MySQL_GLOBAL(php3_mysql_module).le_link); return_value->type = IS_LONG; ! /* add it to the hash */ new_index_ptr.ptr = (void *) return_value->value.lval; #ifdef THREAD_SAFE --- 591,597 ---- /* add it to the list */ return_value->value.lval = php3_list_insert(mysql,MySQL_GLOBAL(php3_mysql_module).le_link); return_value->type = IS_LONG; ! /* add it to the hash */ new_index_ptr.ptr = (void *) return_value->value.lval; #ifdef THREAD_SAFE *************** *** 546,551 **** --- 605,611 ---- } MySQL_GLOBAL(php3_mysql_module).num_links++; } + efree(hashed_details); MySQL_GLOBAL(php3_mysql_module).default_link=return_value->value.lval; } *************** *** 583,589 **** MYSQL *mysql; MySQL_TLS_VARS; - switch (ARG_COUNT(ht)) { case 0: id = MySQL_GLOBAL(php3_mysql_module).default_link; --- 643,648 ---- *************** *** 653,659 **** } else { RETURN_TRUE; } - } void php3_mysql_create_db(INTERNAL_FUNCTION_PARAMETERS) --- 712,717 ---- *************** *** 779,787 **** --- 837,852 ---- } convert_to_string(query); + /* mysql_query binary unsafe, use mysql_real_query */ + #if MYSQL_VERSION_ID > 32199 + if (mysql_real_query(mysql,query->value.str.val,query->value.str.len)!=0) { + RETURN_FALSE; + } + #else if (mysql_query(mysql,query->value.str.val)!=0) { RETURN_FALSE; } + #endif if ((mysql_result=mysql_store_result(mysql))==NULL) { /*php3_error(E_WARNING,"Unable to save MySQL query result"); RETURN_FALSE; *************** *** 835,843 **** --- 900,915 ---- } convert_to_string(query); + /* mysql_query is binary unsafe, use mysql_real_query */ + #if MYSQL_VERSION_ID > 32199 + if (mysql_real_query(mysql,query->value.str.val,query->value.str.len)!=0) { + RETURN_FALSE; + } + #else if (mysql_query(mysql,query->value.str.val)!=0) { RETURN_FALSE; } + #endif if ((mysql_result=mysql_store_result(mysql))==NULL) { /* php3_error(E_WARNING,"Unable to save MySQL query result"); *************** *** 1096,1102 **** RETURN_FALSE; } ! /* WARNING 3.22.6 uses int64 */ return_value->value.lval = (long)mysql_affected_rows(mysql); return_value->type = IS_LONG; } --- 1168,1174 ---- RETURN_FALSE; } ! /* conversion from int64 to long happing here */ return_value->value.lval = (long)mysql_affected_rows(mysql); return_value->type = IS_LONG; } *************** *** 1132,1138 **** RETURN_FALSE; } ! /* WARNING 3.22.6 uses int64 */ return_value->value.lval = (long)mysql_insert_id(mysql); return_value->type = IS_LONG; } --- 1204,1210 ---- RETURN_FALSE; } ! /* conversion from int64 to long happing here */ return_value->value.lval = (long)mysql_insert_id(mysql); return_value->type = IS_LONG; } *************** *** 1143,1149 **** pval *result, *row, *field=NULL; MYSQL_RES *mysql_result; MYSQL_ROW sql_row; ! unsigned int *sql_row_lengths; int type,field_offset=0; MySQL_TLS_VARS; --- 1215,1221 ---- pval *result, *row, *field=NULL; MYSQL_RES *mysql_result; MYSQL_ROW sql_row; ! mysql_row_length_type *sql_row_lengths; int type,field_offset=0; MySQL_TLS_VARS; *************** *** 1233,1245 **** } if (sql_row[field_offset]) { ! /* FIXME php3ini issue if (php3_ini.magic_quotes_runtime) { return_value->value.str.val = _php3_addslashes(sql_row[field_offset],sql_row_lengths[field_offset],&return_value->value.str.len,0); ! } else { */ return_value->value.str.len = sql_row_lengths[field_offset]; return_value->value.str.val = (char *) safe_estrndup(sql_row[field_offset],return_value->value.str.len); ! /* } */ } else { return_value->value.str.val = undefined_variable_string; return_value->value.str.len=0; --- 1305,1319 ---- } if (sql_row[field_offset]) { ! #ifndef PHP_31 /* FIXME: cannot access php3_ini in modules */ if (php3_ini.magic_quotes_runtime) { return_value->value.str.val = _php3_addslashes(sql_row[field_offset],sql_row_lengths[field_offset],&return_value->value.str.len,0); ! } else ! #endif ! { return_value->value.str.len = sql_row_lengths[field_offset]; return_value->value.str.val = (char *) safe_estrndup(sql_row[field_offset],return_value->value.str.len); ! } } else { return_value->value.str.val = undefined_variable_string; return_value->value.str.len=0; *************** *** 1270,1276 **** RETURN_FALSE; } ! /* WARNING 3.22.6 uses int64 */ return_value->value.lval = (long)mysql_num_rows(mysql_result); return_value->type = IS_LONG; } --- 1344,1350 ---- RETURN_FALSE; } ! /* conversion from int64 to long happing here */ return_value->value.lval = (long)mysql_num_rows(mysql_result); return_value->type = IS_LONG; } *************** *** 1306,1312 **** pval *result; MYSQL_RES *mysql_result; MYSQL_ROW mysql_row; ! unsigned int *mysql_row_lengths; int type; int num_fields; int i; --- 1380,1386 ---- pval *result; MYSQL_RES *mysql_result; MYSQL_ROW mysql_row; ! mysql_row_length_type *mysql_row_lengths; int type; int num_fields; int i; *************** *** 1335,1349 **** for (i=0; i<num_fields; i++) { if (mysql_row[i]) { ! /* FIXME php3ini issue if (php3_ini.magic_quotes_runtime) { int len; char *tmp=_php3_addslashes(mysql_row[i],mysql_row_lengths[i],&len,0); add_index_stringl(return_value, i, tmp, len, 0); ! } else { */ add_index_stringl(return_value, i, mysql_row[i], mysql_row_lengths[i], 1); ! /* } */ } else { /* NULL field, don't set it */ /*add_index_stringl(return_value, i, empty_string, 0, 1);*/ --- 1409,1425 ---- for (i=0; i<num_fields; i++) { if (mysql_row[i]) { ! #ifndef PHP_31 /* FIXME cannot access php3_ini in modules */ if (php3_ini.magic_quotes_runtime) { int len; char *tmp=_php3_addslashes(mysql_row[i],mysql_row_lengths[i],&len,0); add_index_stringl(return_value, i, tmp, len, 0); ! } else ! #endif ! { add_index_stringl(return_value, i, mysql_row[i], mysql_row_lengths[i], 1); ! } } else { /* NULL field, don't set it */ /*add_index_stringl(return_value, i, empty_string, 0, 1);*/ *************** *** 1358,1364 **** MYSQL_RES *mysql_result; MYSQL_ROW mysql_row; MYSQL_FIELD *mysql_field; ! unsigned int *mysql_row_lengths; int type; int num_fields; int i; --- 1434,1440 ---- MYSQL_RES *mysql_result; MYSQL_ROW mysql_row; MYSQL_FIELD *mysql_field; ! mysql_row_length_type *mysql_row_lengths; int type; int num_fields; int i; *************** *** 1391,1405 **** mysql_field_seek(mysql_result,0); for (mysql_field=mysql_fetch_field(mysql_result),i=0; mysql_field; mysql_field=mysql_fetch_field(mysql_result),i++) { if (mysql_row[i]) { ! /* FIXME php3ini issue if (php3_ini.magic_quotes_runtime) { int len; char *tmp=_php3_addslashes(mysql_row[i],mysql_row_lengths[i],&len,0); add_get_index_stringl(return_value, i, tmp, len, (void **) &pval_ptr, 0); ! } else { */ add_get_index_stringl(return_value, i, mysql_row[i], mysql_row_lengths[i], (void **) &pval_ptr, 1); ! /* } */ _php3_hash_pointer_update(return_value->value.ht, mysql_field->name, strlen(mysql_field->name)+1, pval_ptr); } else { /* NULL field, don't set it */ --- 1467,1483 ---- mysql_field_seek(mysql_result,0); for (mysql_field=mysql_fetch_field(mysql_result),i=0; mysql_field; mysql_field=mysql_fetch_field(mysql_result),i++) { if (mysql_row[i]) { ! #ifndef PHP_31 /* FIXME cannot access php3_ini in modules */ if (php3_ini.magic_quotes_runtime) { int len; char *tmp=_php3_addslashes(mysql_row[i],mysql_row_lengths[i],&len,0); add_get_index_stringl(return_value, i, tmp, len, (void **) &pval_ptr, 0); ! } else ! #endif ! { add_get_index_stringl(return_value, i, mysql_row[i], mysql_row_lengths[i], (void **) &pval_ptr, 1); ! } _php3_hash_pointer_update(return_value->value.ht, mysql_field->name, strlen(mysql_field->name)+1, pval_ptr); } else { /* NULL field, don't set it */ *************** *** 1457,1463 **** { pval *result; MYSQL_RES *mysql_result; ! int *lengths; int type; int num_fields; int i; --- 1535,1541 ---- { pval *result; MYSQL_RES *mysql_result; ! mysql_row_length_type *lengths; int type; int num_fields; int i; *************** *** 1588,1599 **** add_property_string(return_value, "table",(mysql_field->table?mysql_field->table:empty_string), 1); add_property_string(return_value, "def",(mysql_field->def?mysql_field->def:empty_string), 1); add_property_long(return_value, "max_length",mysql_field->max_length); ! add_property_long(return_value, "not_null",IS_NOT_NULL(mysql_field->flags)); ! add_property_long(return_value, "primary_key",IS_PRI_KEY(mysql_field->flags)); add_property_long(return_value, "multiple_key",(mysql_field->flags&MULTIPLE_KEY_FLAG?1:0)); add_property_long(return_value, "unique_key",(mysql_field->flags&UNIQUE_KEY_FLAG?1:0)); ! add_property_long(return_value, "numeric",IS_NUM(mysql_field->type)); ! add_property_long(return_value, "blob",IS_BLOB(mysql_field->flags)); add_property_string(return_value, "type",php3_mysql_get_field_name(mysql_field->type), 1); add_property_long(return_value, "unsigned",(mysql_field->flags&UNSIGNED_FLAG?1:0)); add_property_long(return_value, "zerofill",(mysql_field->flags&ZEROFILL_FLAG?1:0)); --- 1666,1677 ---- add_property_string(return_value, "table",(mysql_field->table?mysql_field->table:empty_string), 1); add_property_string(return_value, "def",(mysql_field->def?mysql_field->def:empty_string), 1); add_property_long(return_value, "max_length",mysql_field->max_length); ! add_property_long(return_value, "not_null",IS_NOT_NULL(mysql_field->flags)?1:0); ! add_property_long(return_value, "primary_key",IS_PRI_KEY(mysql_field->flags)?1:0); add_property_long(return_value, "multiple_key",(mysql_field->flags&MULTIPLE_KEY_FLAG?1:0)); add_property_long(return_value, "unique_key",(mysql_field->flags&UNIQUE_KEY_FLAG?1:0)); ! add_property_long(return_value, "numeric",IS_NUM(mysql_field->type)?1:0); ! add_property_long(return_value, "blob",IS_BLOB(mysql_field->flags)?1:0); add_property_string(return_value, "type",php3_mysql_get_field_name(mysql_field->type), 1); add_property_long(return_value, "unsigned",(mysql_field->flags&UNSIGNED_FLAG?1:0)); add_property_long(return_value, "zerofill",(mysql_field->flags&ZEROFILL_FLAG?1:0)); *************** *** 1641,1646 **** --- 1719,1726 ---- MYSQL_RES *mysql_result; MYSQL_FIELD *mysql_field; int type; + char buf[512]; + int len; MySQL_TLS_VARS; if (ARG_COUNT(ht)!=2 || getParameters(ht, 2, &result, &field)==FAILURE) { *************** *** 1687,1708 **** return_value->type = IS_STRING; break; case PHP3_MYSQL_FIELD_FLAGS: ! if (IS_NOT_NULL(mysql_field->flags) && IS_PRI_KEY(mysql_field->flags)) { ! return_value->value.str.val = estrndup("primary key not null",20); ! return_value->value.str.len = 20; ! return_value->type = IS_STRING; ! } else if (IS_NOT_NULL(mysql_field->flags)) { ! return_value->value.str.val = estrndup("not null",8); ! return_value->value.str.len = 8; ! return_value->type = IS_STRING; ! } else if (IS_PRI_KEY(mysql_field->flags)) { ! return_value->value.str.val = estrndup("primary key",11); ! return_value->value.str.len = 11; ! return_value->type = IS_STRING; ! } else { ! var_reset(return_value); } break; default: RETURN_FALSE; } --- 1767,1840 ---- return_value->type = IS_STRING; break; case PHP3_MYSQL_FIELD_FLAGS: ! strcpy(buf, ""); ! #ifdef IS_NOT_NULL ! if (IS_NOT_NULL(mysql_field->flags)) { ! strcat(buf, "not_null "); ! } ! #endif ! #ifdef IS_PRI_KEY ! if (IS_PRI_KEY(mysql_field->flags)) { ! strcat(buf, "primary_key "); ! } ! #endif ! #ifdef UNIQUE_KEY_FLAG ! if (mysql_field->flags&UNIQUE_KEY_FLAG) { ! strcat(buf, "unique_key "); ! } ! #endif ! #ifdef MULTIPLE_KEY_FLAG ! if (mysql_field->flags&MULTIPLE_KEY_FLAG) { ! strcat(buf, "multiple_key "); ! } ! #endif ! #ifdef IS_BLOB ! if (IS_BLOB(mysql_field->flags)) { ! strcat(buf, "blob "); ! } ! #endif ! #ifdef UNSIGNED_FLAG ! if (mysql_field->flags&UNSIGNED_FLAG) { ! strcat(buf, "unsigned "); ! } ! #endif ! #ifdef ZEROFILL_FLAG ! if (mysql_field->flags&ZEROFILL_FLAG) { ! strcat(buf, "zerofill "); } + #endif + #ifdef BINARY_FLAG + if (mysql_field->flags&BINARY_FLAG) { + strcat(buf, "binary "); + } + #endif + #ifdef ENUM_FLAG + if (mysql_field->flags&ENUM_FLAG) { + strcat(buf, "enum "); + } + #endif + #ifdef AUTO_INCREMENT_FLAG + if (mysql_field->flags&AUTO_INCREMENT_FLAG) { + strcat(buf, "auto_increment "); + } + #endif + #ifdef TIMESTAMP_FLAG + if (mysql_field->flags&TIMESTAMP_FLAG) { + strcat(buf, "timestamp "); + } + #endif + len = strlen(buf); + /* remove trailing space, if present */ + if (len && buf[len-1] == ' ') { + buf[len-1] = 0; + len--; + } + + return_value->value.str.len = len; + return_value->value.str.val = estrndup(buf, len); + return_value->type = IS_STRING; break; + default: RETURN_FALSE; } Index: php31/ext/mysql/mysql.dsp diff -c php31/ext/mysql/mysql.dsp:2.3 php31/ext/mysql/mysql.dsp:2.4 *** php31/ext/mysql/mysql.dsp:2.3 Wed Sep 30 00:01:34 1998 --- php31/ext/mysql/mysql.dsp Sat Oct 17 16:45:34 1998 *************** *** 1,5 **** # Microsoft Developer Studio Project File - Name="mysql" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 5.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 --- 1,5 ---- # Microsoft Developer Studio Project File - Name="mysql" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 *************** *** 22,27 **** --- 22,28 ---- !MESSAGE # Begin Project + # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe *************** *** 43,50 **** # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../../include" /I "./" /I "../../" /I "../../main" /D "HAVE_MYSQL" /D "HAVE_ERRMSG_H" /D "THREAD_SAFE" /D "MSVC5" /D "COMPILE_DL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /I /usr/src/phpcvs/php3" /I /usr/src/mysql/include" " " /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe --- 44,51 ---- # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../../include" /I "./" /I "../../" /I "../../main" /D "HAVE_MYSQL" /D "HAVE_ERRMSG_H" /D "THREAD_SAFE" /D "MSVC5" /D "COMPILE_DL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /I /usr/src/phpcvs/php3" /I /usr/src/mysql/include" " " /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe *************** *** 69,77 **** # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "./" /I "../../" /I "../../main" /I "../../../../include" /D "HAVE_MYSQL" /D "HAVE_ERRMSG_H" /D "THREAD_SAFE" /D "DEBUG" /D "MSVC5" /D "COMPILE_DL" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /I /usr/src/phpcvs/php3" /I /usr/src/mysql/include" " " /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe --- 70,78 ---- # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "./" /I "../../" /I "../../main" /I "../../../../include" /D PHP_31=1 /D "HAVE_MYSQL" /D "HAVE_ERRMSG_H" /D "THREAD_SAFE" /D "DEBUG" /D "MSVC5" /D "COMPILE_DL" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /I /usr/src/phpcvs/php3" /I /usr/src/mysql/include" " " /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe Index: php31/ext/mysql/php3_mysql.h diff -c php31/ext/mysql/php3_mysql.h:2.0 php31/ext/mysql/php3_mysql.h:2.1 *** php31/ext/mysql/php3_mysql.h:2.0 Fri Jul 3 09:13:39 1998 --- php31/ext/mysql/php3_mysql.h Sat Oct 17 16:45:35 1998 *************** *** 28,39 **** */ ! /* $Id: php3_mysql.h,v 2.0 1998/07/03 13:13:39 rasmus Exp $ */ #ifndef _PHP3_MYSQL_H #define _PHP3_MYSQL_H ! #ifdef COMPILE_DL #undef HAVE_MYSQL #define HAVE_MYSQL 1 #endif --- 28,39 ---- */ ! /* $Id: php3_mysql.h,v 2.1 1998/10/17 20:45:35 shane Exp $ */ #ifndef _PHP3_MYSQL_H #define _PHP3_MYSQL_H ! #if COMPILE_DL #undef HAVE_MYSQL #define HAVE_MYSQL 1 #endif -- PHP Development Mailing List http://www.php.net/ To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net For help: php-dev-help@lists.php.net

« previous php.dev (#1877) next »