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

📄 mysqli_api.c

📁 linux下安装不上mysql5与php5的可用此关联
💻 C
📖 第 1 页 / 共 5 页
字号:
{	MY_MYSQL	*mysql;	zval		*mysql_link;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {		return;	}	MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID);#if !defined(HAVE_MYSQLND)	if (mysql->li_read) {		efree(Z_STRVAL_P(mysql->li_read));		zval_dtor(mysql->li_read);		mysql->li_read = NULL;	}#else	mysqlnd_local_infile_default(mysql->mysql);#endif}/* }}} *//* {{{ proto bool mysqli_set_local_infile_handler(object link, callback read_func) U   Set callback functions for LOAD DATA LOCAL INFILE */PHP_FUNCTION(mysqli_set_local_infile_handler){	MY_MYSQL	*mysql;	zval  		*mysql_link;	zval		callback_name;	zval		*callback_func;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oz", &mysql_link, mysqli_link_class_entry,			&callback_func) == FAILURE) {		return;	}	MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID);	if (UG(unicode)) {		convert_to_string(callback_func);	}	/* check callback function */	if (!zend_is_callable(callback_func, 0, &callback_name)) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback function %R", Z_TYPE(callback_name), Z_UNIVAL(callback_name));		zval_dtor(&callback_name);		RETURN_FALSE;			}	zval_dtor(&callback_name);	/* save callback function */#if !defined(HAVE_MYSQLND)	ALLOC_ZVAL(mysql->li_read);		ZVAL_STRING(mysql->li_read, callback_func->value.str.val, 1);#else	mysqlnd_set_local_infile_handler(mysql->mysql, callback_func->value.str.val);#endif	RETURN_TRUE;}/* }}} *//* {{{ proto bool mysqli_more_results(object link) U   check if there any more query results from a multi query */PHP_FUNCTION(mysqli_more_results){	MY_MYSQL		*mysql;	zval			*mysql_link;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {		return;	}	MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID);	RETURN_BOOL(mysql_more_results(mysql->mysql));}/* }}} *//* {{{ proto bool mysqli_next_result(object link) U   read next result from multi_query */PHP_FUNCTION(mysqli_next_result) {	MY_MYSQL		*mysql;	zval			*mysql_link;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {		return;	}	MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID);	if (!mysql_more_results(mysql->mysql)) {		php_error_docref(NULL TSRMLS_CC, E_STRICT, "There is no next result set. "						"Please, call mysqli_more_results()/mysqli::more_results() to check "						"whether to call this function/method");	}	RETURN_BOOL(!mysql_next_result(mysql->mysql));}/* }}} *//* {{{ proto int mysqli_num_fields(object result) U   Get number of fields in result */PHP_FUNCTION(mysqli_num_fields){	MYSQL_RES	*result;	zval		*mysql_result;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {		return;	}	MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID);	RETURN_LONG(mysql_num_fields(result));}/* }}} *//* {{{ proto mixed mysqli_num_rows(object result) U   Get number of rows in result */PHP_FUNCTION(mysqli_num_rows){	MYSQL_RES	*result;	zval		*mysql_result;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {		return;	}	MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID);#if !defined(HAVE_MYSQLND)	if (result->handle && result->handle->status == MYSQL_STATUS_USE_RESULT)#else	if (result->conn)#endif	{		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function cannot be used with MYSQL_USE_RESULT");		RETURN_LONG(0);	}	MYSQLI_RETURN_LONG_LONG(mysql_num_rows(result));}/* }}} *//* {{{ proto bool mysqli_options(object link, int flags, mixed values) U   Set options */PHP_FUNCTION(mysqli_options){	MY_MYSQL 		*mysql;	zval  			*mysql_link = NULL;	zval  			*mysql_value;	long  			mysql_option;	unsigned int 	l_value;	long  			ret;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olz", &mysql_link, mysqli_link_class_entry, &mysql_option, &mysql_value) == FAILURE) {		return;	}	MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_INITIALIZED);	switch (Z_TYPE_PP(&mysql_value)) {		case IS_UNICODE:			zval_unicode_to_string(mysql_value TSRMLS_CC);		case IS_STRING:			ret = mysql_options(mysql->mysql, mysql_option, Z_STRVAL_PP(&mysql_value));			break;		default:			convert_to_long_ex(&mysql_value);			l_value = Z_LVAL_PP(&mysql_value);			ret = mysql_options(mysql->mysql, mysql_option, (char *)&l_value);			break;	}	RETURN_BOOL(!ret);}   /* }}} *//* {{{ proto bool mysqli_ping(object link) U   Ping a server connection or reconnect if there is no connection */PHP_FUNCTION(mysqli_ping){	MY_MYSQL 	*mysql;	zval  		*mysql_link;	long		rc;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {		return;	}	MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID);	rc = mysql_ping(mysql->mysql);	MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);	RETURN_BOOL(!rc);}/* }}} *//* {{{ proto mixed mysqli_prepare(object link, string query) U   Prepare a SQL statement for execution */PHP_FUNCTION(mysqli_prepare){	MY_MYSQL		*mysql;	MY_STMT 		*stmt;	char			*query;	int				query_len;	zval			*mysql_link;	MYSQLI_RESOURCE *mysqli_resource; 	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&",&mysql_link, mysqli_link_class_entry, 									&query, &query_len, UG(utf8_conv)) == FAILURE) {		return;	}	MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID);#if !defined(HAVE_MYSQLND)	if (mysql->mysql->status == MYSQL_STATUS_GET_RESULT) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "All data must be fetched before a new statement prepare takes place");		RETURN_FALSE;	}#endif	stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT));	if ((stmt->stmt = mysql_stmt_init(mysql->mysql))) {		if (mysql_stmt_prepare(stmt->stmt, query, query_len)) {#if !defined(HAVE_MYSQLND)			char  last_error[MYSQL_ERRMSG_SIZE];			char  sqlstate[SQLSTATE_LENGTH+1];			unsigned int last_errno;			/* mysql_stmt_close() (libmysql) clears errors, so we have to store them temporarily */			last_errno = stmt->stmt->last_errno;			memcpy(last_error, stmt->stmt->last_error, MYSQL_ERRMSG_SIZE);			memcpy(sqlstate, mysql->mysql->net.sqlstate, SQLSTATE_LENGTH+1);#endif			mysqli_stmt_close(stmt->stmt, FALSE);			stmt->stmt = NULL;#if !defined(HAVE_MYSQLND)			/* restore error messages */			mysql->mysql->net.last_errno = last_errno;			memcpy(mysql->mysql->net.last_error, last_error, MYSQL_ERRMSG_SIZE);			memcpy(mysql->mysql->net.sqlstate, sqlstate, SQLSTATE_LENGTH+1);#endif		}	}	/* don't initialize stmt->query with NULL, we ecalloc()-ed the memory */	/* Get performance boost if reporting is switched off */	if (stmt->stmt && query_len && (MyG(report_mode) & MYSQLI_REPORT_INDEX)) {		stmt->query = (char *)emalloc(query_len + 1);		memcpy(stmt->query, query, query_len);		stmt->query[query_len] = '\0';	}	/* don't join to the previous if because it won't work if mysql_stmt_prepare_fails */	if (!stmt->stmt) {		MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);		efree(stmt);		RETURN_FALSE;	}	mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));	mysqli_resource->ptr = (void *)stmt;	/* change status */	mysqli_resource->status = MYSQLI_STATUS_VALID;	MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_stmt_class_entry);}/* }}} *//* {{{ proto bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]]) U   Open a connection to a mysql server */ PHP_FUNCTION(mysqli_real_connect){	MY_MYSQL 		*mysql;	char			*hostname, *username, *passwd, *dbname, *socket;	int				hostname_len, username_len, passwd_len = 0, dbname_len, socket_len = 0;	unsigned long 	port=0, flags=0;	zval			*mysql_link;	/* optional parameters have to be initialized */	hostname = username = dbname = passwd = socket = NULL;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|s&s&s&s&ls&l", &mysql_link, mysqli_link_class_entry,		&hostname, &hostname_len, UG(utf8_conv), &username, &username_len, UG(utf8_conv), &passwd, &passwd_len, UG(utf8_conv),		&dbname, &dbname_len, UG(utf8_conv), &port, &socket, &socket_len, UG(utf8_conv), &flags) == FAILURE) {		return;	}	if (!socket_len) {		socket = NULL;	}	if (!passwd) {		passwd = MyG(default_pw);		passwd_len = strlen(passwd);	}	if (!username){		username = MyG(default_user);	}	if (!hostname) {		hostname = MyG(default_host);	}	MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_INITIALIZED);	/* remove some insecure options */	flags ^= CLIENT_MULTI_STATEMENTS;   /* don't allow multi_queries via connect parameter */	if (PG(open_basedir) && strlen(PG(open_basedir))) {		flags ^= CLIENT_LOCAL_FILES;	}#if !defined(HAVE_MYSQLND)	if (mysql_real_connect(mysql->mysql, hostname, username, passwd, dbname ,port, socket ,flags) == NULL) #else	if (mysqlnd_connect(mysql->mysql, hostname, username, passwd, passwd_len, dbname, dbname_len,						  port, socket, flags, MyG(mysqlnd_zval_cache) TSRMLS_CC) == NULL)#endif	{		php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC);		php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql) TSRMLS_CC,										"%s", mysql_error(mysql->mysql));		/* change status */		MYSQLI_SET_STATUS(&mysql_link, MYSQLI_STATUS_INITIALIZED);		RETURN_FALSE;	}	php_mysqli_set_error(mysql_errno(mysql->mysql), (char *)mysql_error(mysql->mysql) TSRMLS_CC);#if !defined(HAVE_MYSQLND)	mysql->mysql->reconnect = MyG(reconnect);	/* set our own local_infile handler */	php_set_local_infile_handler_default(mysql);#endif	/* change status */	MYSQLI_SET_STATUS(&mysql_link, MYSQLI_STATUS_VALID);	RETURN_TRUE;}/* }}} *//* {{{ proto bool mysqli_real_query(object link, string query) U   Binary-safe version of mysql_query() */PHP_FUNCTION(mysqli_real_query){	MY_MYSQL		*mysql;	zval			*mysql_link;	char			*query;	int				query_len;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &mysql_link, mysqli_link_class_entry, 									 &query, &query_len, UG(utf8_conv)) == FAILURE) {		return;	}	MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID);	MYSQLI_DISABLE_MQ; /* disable multi statements/queries */	if (mysql_real_query(mysql->mysql, query, query_len))	{		MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);		RETVAL_FALSE;	} else {		if (!mysql_field_count(mysql->mysql)) {			if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {				php_mysqli_report_index(query, mysqli_server_status(mysql->mysql) TSRMLS_CC);			}		}		RETVAL_TRUE;	}}/* }}} *//* {{{ proto string mysqli_real_escape_string(object link, string escapestr) U   Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection */PHP_FUNCTION(mysqli_real_escape_string) {	MY_MYSQL		*mysql;	zval			*mysql_link = NULL;	char			*escapestr;	int				escapestr_len;	char			*newstr;	int				newstr_len;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &mysql_link, mysqli_link_class_entry, 									 &escapestr, &escapestr_len, UG(utf8_conv)) == FAILURE) {		return;	}		MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID);	newstr = safe_emalloc(2, escapestr_len, 1);	newstr_len = mysql_real_escape_string(mysql->mysql, newstr, escapestr, escapestr_len);	newstr = erealloc(newstr, newstr_len + 1);	RETURN_UTF8_STRING(newstr, ZSTR_AUTOFREE);}/* }}} *//* {{{ proto bool mysqli_rollback(object link) U   Undo actions from current transaction */PHP_FUNCTION(mysqli_rollback){	MY_MYSQL	*mysql;	zval  		*mysql_link;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {		return;	}	MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID);	if (mysql_rollback(mysql->mysql)) {		RETURN_FALSE;	}	RETURN_TRUE;}/* }}} *//* {{{ proto bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data) U*/PHP_FUNCTION(mysqli_stmt_send_long_data){	MY_STMT *stmt;	zval  	*mysql_stmt;	long	param_nr;	char	*data;	int		data_len;	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ols&", &mysql_stmt, mysqli_stmt_class_entry, &param_nr, 									 &data, &data_len, UG(utf8_conv)) == FAILURE) {		return;	}	MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID);	if (param_nr < 0) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter number");		RETURN_FALSE;	} 	if (mysql_stmt_send_long_data(stmt->stmt, param_nr, data, data_len)) {		RETURN_FALSE;	} else {		RETURN_TRUE;	}}/* }}} *//* {{{ proto mixed mysqli_stmt_affected_rows(object stmt) U

⌨️ 快捷键说明

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