⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mysqli.c

📁 linux下安装不上mysql5与php5的可用此关联
💻 C
📖 第 1 页 / 共 3 页
字号:
	((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->ptr = mysqli_resource;}/* }}} *//* {{{ 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;	MYSQLI_RESOURCE 	*mysqli_resource;	long				resmode = MYSQLI_STORE_RESULT;	switch (ZEND_NUM_ARGS()) {		case 1:	        if (zend_parse_parameters(1 TSRMLS_CC, "O", &mysql_link, mysqli_link_class_entry)==FAILURE) {				return;			}		break;		case 2:	        if (zend_parse_parameters(2 TSRMLS_CC, "Ol", &mysql_link, mysqli_link_class_entry, &resmode)==FAILURE) {				return;			}		break;		default:			WRONG_PARAM_COUNT;	}	MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID);	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_resource->status = MYSQLI_STATUS_VALID;		((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->ptr = mysqli_resource;}/* }}} *//* {{{ php_mysqli_fetch_into_hash */void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags, int into_object){	MYSQL_RES		*result;	zval			*mysql_result;	long			fetchtype;	zval            *ctor_params = NULL;	zend_class_entry *ce = NULL;#if !defined(HAVE_MYSQLND)	unsigned int	i;	MYSQL_FIELD		*fields;	MYSQL_ROW		row;	unsigned long	*field_len;#endif	if (into_object) {		char *class_name;		int class_name_len;		if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|sz", &mysql_result, mysqli_result_class_entry, &class_name, &class_name_len, &ctor_params) == FAILURE) {			return;		}		if (ZEND_NUM_ARGS() < (getThis() ? 1 : 2)) {			ce = zend_standard_class_def;		} else {			ce = zend_fetch_class(class_name, class_name_len, ZEND_FETCH_CLASS_AUTO TSRMLS_CC);		}		if (!ce) {			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not find class '%s'", class_name);			return;		}		fetchtype = MYSQLI_ASSOC;	} else {		if (override_flags) {			if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {				return;			}			fetchtype = override_flags;		} else {			fetchtype = MYSQLI_BOTH;			if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &mysql_result, mysqli_result_class_entry, &fetchtype) == FAILURE) {				return;			}		}	}	MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); 	if (fetchtype < MYSQLI_ASSOC || fetchtype > MYSQLI_BOTH) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "The result type should be either MYSQLI_NUM, MYSQLI_ASSOC or MYSQLI_BOTH");		RETURN_FALSE;	}#if !defined(HAVE_MYSQLND)	if (!(row = mysql_fetch_row(result))) {		RETURN_NULL();	}	if (fetchtype & MYSQLI_ASSOC) {		fields = mysql_fetch_fields(result);	}	array_init(return_value);	field_len = mysql_fetch_lengths(result);	for (i = 0; i < mysql_num_fields(result); i++) {		if (row[i]) {			zval *res;			MAKE_STD_ZVAL(res);			/* check if we need magic quotes */			if (PG(magic_quotes_runtime)) {				Z_TYPE_P(res) = IS_STRING;				Z_STRVAL_P(res) = php_addslashes(row[i], field_len[i], &Z_STRLEN_P(res), 0 TSRMLS_CC);			} else {				ZVAL_STRINGL(res, row[i], field_len[i], 1);				}			if (fetchtype & MYSQLI_NUM) {				add_index_zval(return_value, i, res);			}			if (fetchtype & MYSQLI_ASSOC) {				if (fetchtype & MYSQLI_NUM) {					ZVAL_ADDREF(res);				}				add_assoc_zval(return_value, fields[i].name, res);			}		} else {			if (fetchtype & MYSQLI_NUM) {				add_index_null(return_value, i);			}			if (fetchtype & MYSQLI_ASSOC) {				add_assoc_null(return_value, fields[i].name);			}		}	}#else	mysqlnd_fetch_into(result, MYSQLND_FETCH_ASSOC, return_value);#endif	if (into_object && Z_TYPE_P(return_value) != IS_NULL) {		zval dataset = *return_value;		zend_fcall_info fci;		zend_fcall_info_cache fcc;		zval *retval_ptr; 			object_and_properties_init(return_value, ce, NULL);		zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC);			if (ce->constructor) {			fci.size = sizeof(fci);			fci.function_table = &ce->function_table;			fci.function_name = NULL;			fci.symbol_table = NULL;			fci.object_pp = &return_value;			fci.retval_ptr_ptr = &retval_ptr;			if (ctor_params && Z_TYPE_P(ctor_params) != IS_NULL) {				if (Z_TYPE_P(ctor_params) == IS_ARRAY) {					HashTable *ht = Z_ARRVAL_P(ctor_params);					Bucket *p;						fci.param_count = 0;					fci.params = safe_emalloc(sizeof(zval*), ht->nNumOfElements, 0);					p = ht->pListHead;					while (p != NULL) {						fci.params[fci.param_count++] = (zval**)p->pData;						p = p->pListNext;					}				} else {					/* Two problems why we throw exceptions here: PHP is typeless					 * and hence passing one argument that's not an array could be					 * by mistake and the other way round is possible, too. The 					 * single value is an array. Also we'd have to make that one					 * argument passed by reference.					 */					zend_throw_exception(zend_exception_get_default(TSRMLS_C), "Parameter ctor_params must be an array", 0 TSRMLS_CC);					return;				}			} else {				fci.param_count = 0;				fci.params = NULL;			}			fci.no_separation = 1;			fcc.initialized = 1;			fcc.function_handler = ce->constructor;			fcc.calling_scope = EG(scope);			fcc.object_pp = &return_value;					if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) {				zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC, "Could not execute %s::%s()", ce->name, ce->constructor->common.function_name);			} else {				if (retval_ptr) {					zval_ptr_dtor(&retval_ptr);				}			}			if (fci.params) {				efree(fci.params);			}		} else if (ctor_params) {			zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC, "Class %s does not have a constructor hence you cannot use ctor_params", ce->name);		}	}}/* }}} *//* {{{ php_mysqli_set_error */PHP_MYSQLI_API void php_mysqli_set_error(long mysql_errno, char *mysql_err TSRMLS_DC){	MyG(error_no) = mysql_errno;	if (MyG(error_msg)) {		efree(MyG(error_msg));	}	MyG(error_msg) = estrdup(mysql_err);}/* }}} */#define ALLOC_CALLBACK_ARGS(a, b, c)\if (c) {\	a = (zval ***)safe_emalloc(c, sizeof(zval **), 0);\	for (i = b; i < c; i++) {\		a[i] = emalloc(sizeof(zval *));\		MAKE_STD_ZVAL(*a[i]);\	}\}#define FREE_CALLBACK_ARGS(a, b, c)\if (a) {\	for (i=b; i < c; i++) {\		zval_ptr_dtor(a[i]);\		efree(a[i]);\	}\	efree(a);\}#define LOCAL_INFILE_ERROR_MSG(source,dest)\memset(source, 0, LOCAL_INFILE_ERROR_LEN);\memcpy(source, dest, LOCAL_INFILE_ERROR_LEN-1);/* {{{ void php_set_local_infile_handler_default */void php_set_local_infile_handler_default(MY_MYSQL *mysql) {	/* register internal callback functions */#if !defined(HAVE_MYSQLND)	mysql_set_local_infile_handler(mysql->mysql, &php_local_infile_init, &php_local_infile_read,				&php_local_infile_end, &php_local_infile_error, (void *)mysql);	mysql->li_read = NULL;#else	mysqlnd_local_infile_default(mysql->mysql);#endif}/* }}} */#if !defined(HAVE_MYSQLND)/* {{{ php_local_infile_init */int php_local_infile_init(void **ptr, const char *filename, void *userdata){	mysqli_local_infile			*data;	MY_MYSQL 					*mysql;	php_stream_context 			*context = NULL;	TSRMLS_FETCH();	/* save pointer to MY_MYSQL structure (userdata) */	if (!(*ptr= data= ((mysqli_local_infile *)calloc(1, sizeof(mysqli_local_infile))))) {		return 1;	}	if (!(mysql = (MY_MYSQL *)userdata)) {		LOCAL_INFILE_ERROR_MSG(data->error_msg, ER(CR_UNKNOWN_ERROR));		return 1;	}	/* check open_basedir */	if (PG(open_basedir)) {		if (php_check_open_basedir_ex(filename, 0 TSRMLS_CC) == -1) {			LOCAL_INFILE_ERROR_MSG(data->error_msg, "open_basedir restriction in effect. Unable to open file");			return 1;		}	}	mysql->li_stream = php_stream_open_wrapper_ex((char *)filename, "r", 0, NULL, context);	if (mysql->li_stream == NULL) {		snprintf((char *)data->error_msg, sizeof(data->error_msg), "Can't find file '%-.64s'.", filename);			return 1;	}	data->userdata = mysql;	return 0;}/* }}} *//* {{{ int php_local_infile_read */int php_local_infile_read(void *ptr, char *buf, uint buf_len){	mysqli_local_infile 		*data;	MY_MYSQL 					*mysql;	zval						***callback_args;	zval						*retval;	zval						*fp;	int							argc = 4;	int							i;	long						rc;	TSRMLS_FETCH();	data= (mysqli_local_infile *)ptr;	mysql = data->userdata;	/* default processing */	if (!mysql->li_read) {		int			count;		count = (int)php_stream_read(mysql->li_stream, buf, buf_len);		if (count < 0) {			LOCAL_INFILE_ERROR_MSG(data->error_msg, ER(2));		}		return count;	}	ALLOC_CALLBACK_ARGS(callback_args, 1, argc);		/* set parameters: filepointer, buffer, buffer_len, errormsg */	MAKE_STD_ZVAL(fp);	php_stream_to_zval(mysql->li_stream, fp);	callback_args[0] = &fp;	ZVAL_STRING(*callback_args[1], "", 1);		ZVAL_LONG(*callback_args[2], buf_len);		ZVAL_STRING(*callback_args[3], "", 1);			if (call_user_function_ex(EG(function_table), 						NULL,						mysql->li_read,						&retval,						argc,	 							callback_args,						0,						NULL TSRMLS_CC) == SUCCESS) {		rc = Z_LVAL_P(retval);		zval_ptr_dtor(&retval);		if (rc > 0) {			if (rc > buf_len) {				/* check buffer overflow */				LOCAL_INFILE_ERROR_MSG(data->error_msg, "Read buffer too large");				rc = -1;			} else {				memcpy(buf, Z_STRVAL_P(*callback_args[1]), rc);			}		}		if (rc < 0) {			LOCAL_INFILE_ERROR_MSG(data->error_msg, Z_STRVAL_P(*callback_args[3]));		}	} else {		LOCAL_INFILE_ERROR_MSG(data->error_msg, "Can't execute load data local init callback function");		rc = -1;	}		FREE_CALLBACK_ARGS(callback_args, 1, argc);	efree(fp);	return rc;}/* }}} *//* {{{ php_local_infile_error */int php_local_infile_error(void *ptr, char *error_msg, uint error_msg_len){	mysqli_local_infile *data = (mysqli_local_infile *) ptr;	if (data) {		strlcpy(error_msg, data->error_msg, error_msg_len);		return 2000;	} 	strlcpy(error_msg, ER(CR_OUT_OF_MEMORY), error_msg_len);	return CR_OUT_OF_MEMORY;}/* }}} *//* {{{ php_local_infile_end */void php_local_infile_end(void *ptr) {	mysqli_local_infile			*data;	MY_MYSQL 					*mysql;	TSRMLS_FETCH();	data= (mysqli_local_infile *)ptr;	if (!data || !(mysql = data->userdata)) {		if (data) {			free(data);		}		return;	}	php_stream_close(mysql->li_stream);	free(data);	return;	}/* }}} */#endif/* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -