All pastes #637796 Raw Edit

Mine

public c v1 · immutable
#637796 ·published 2007-07-29 06:50 UTC
rendered paste body
/*========================================== * Allow user to execute SQL queries [Zarin] *------------------------------------------ */int buildin_query_sql(struct script_state *st){	char *name = NULL;    char *query;	int num, i = 0,j, nb_rows;	struct { char * dst_var_name; char type; } row[32];	TBL_PC *sd = (st->rid)? script_rid2sd(st) : NULL;	query = conv_str(st,& (st->stack->stack_data[st->start+2]));	strcpy(tmp_sql, query);        // ----------    // Connect        //DB connection initialized	mysql_init(&mysql_handle);	printf("Connect MySQL server");	printf("...\n");	if(!mysql_real_connect(&mysql_handle, '127.0.0.1', 'aurora', 'aurora',		'aurora' ,3306, (char *)NULL, 0)	) {		printf("%s\n",mysql_error(&mysql_handle));		exit(1);	} else {		printf ("Connect Success! (MySQL Server)\n");	}        // ----------    	if(mysql_query(&mysql_handle,tmp_sql)){        // Close connection        mysql_close(&mysql_handle);        //mysql_handle = NULL;        		//ShowSQL("DB error - %s\n",mysql_error(&mmysql_handle));		//ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);		push_val(st->stack,C_INT,0);		return 1;	}	// If some data was returned	if((sql_res = mysql_store_result(&mysql_handle))){		// Count the number of rows to store		nb_rows = mysql_num_fields(sql_res);		// Can't store more row than variable		if (nb_rows > st->end - (st->start+3))			nb_rows = st->end - (st->start+3);		if (!nb_rows)		{            // Close connection            mysql_close(&mysql_handle);            //mysql_handle = NULL;            			push_val(st->stack,C_INT,0);			return 0; // Nothing to store		}		if (nb_rows > 32)		{            // Close connection            mysql_close(&mysql_handle);            //mysql_handle = NULL;            			//ShowWarning("buildin_query_sql: too many rows!\n");			push_val(st->stack,C_INT,0);			return 1;		}		memset(row, 0, sizeof(row));		// Verify argument types		for(j=0; j < nb_rows; j++)		{			//if(!data_isreference(conv_str(st,& (st->stack->stack_data[st->start+3+j])))){			//	//ShowWarning("buildin_query_sql: Parameter %d is not a variable!\n", j);			//	push_val(st->stack,C_INT,0);			//	return 0;			//} else {				// Store type of variable (string = 0/int = 1)				num=st->stack->stack_data[st->start+3+j].u.num;				name=(char *)(str_buf+str_data[num&0x00ffffff].str);				if(name[strlen(name)-1] != '$') {					row[j].type = 1;				}				row[j].dst_var_name = name;			//}		}		// Store data		while(i<128 && (sql_row = mysql_fetch_row(sql_res))){			for(j=0; j < nb_rows; j++)			{				if (row[j].type == 1)                    push_val(st->stack,C_INT,(void *)atoi(sql_row[j]));					//setd_sub(st,sd, row[j].dst_var_name, i, (void *)atoi(sql_row[j]),script_getref(st,3+j));				else                    push_val(st->stack,C_CONSTSTR,(void *)sql_row[j]);					//setd_sub(st,sd, row[j].dst_var_name, i, (void *)sql_row[j],script_getref(st,3+j));			}			i++;		}		// Free data		mysql_free_result(sql_res);	}	push_val(st->stack,C_INT,i);    // Close connection    mysql_close(&mysql_handle);    //mysql_handle = NULL;    	return 0;}