📄 mysqli_nonapi.c
字号:
"MYSQLI_FETCH_ASSOC or MYSQLI_FETCH_BOTH"); RETURN_FALSE; } mysqlnd_fetch_all(result, mode, return_value);}/* }}} *//* {{{ proto array mysqli_cache_stats(void) U Returns statistics about the zval cache */PHP_FUNCTION(mysqli_get_cache_stats) { if (ZEND_NUM_ARGS()) { WRONG_PARAM_COUNT; } mysqlnd_palloc_stats(MyG(mysqlnd_zval_cache), return_value);}/* }}} *//* {{{ proto array mysqli_get_client_stats(void) Returns statistics about the zval cache */PHP_FUNCTION(mysqli_get_client_stats) { if (ZEND_NUM_ARGS()) { WRONG_PARAM_COUNT; } mysqlnd_get_client_stats(return_value);}/* }}} *//* {{{ proto array mysqli_get_connection_stats(void) Returns statistics about the zval cache */PHP_FUNCTION(mysqli_get_connection_stats) { 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); mysqlnd_get_connection_stats(mysql->mysql, return_value);}#endif/* }}} *//* {{{ proto mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]]) U Fetch a result row as an object */PHP_FUNCTION(mysqli_fetch_object) { php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQLI_ASSOC, 1); /* todo: mysqlnd support */}/* }}} *//* {{{ proto bool mysqli_multi_query(object link, string query) U allows to execute multiple queries */PHP_FUNCTION(mysqli_multi_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_ENABLE_MQ; if (mysql_real_query(mysql->mysql, query, query_len)) { MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } RETURN_TRUE;}/* }}} *//* {{{ proto mixed mysqli_query(object link, string query [,int resultmode]) U */PHP_FUNCTION(mysqli_query){ MY_MYSQL *mysql; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; MYSQL_RES *result; char *query; int query_len; unsigned long resultmode = MYSQLI_STORE_RESULT; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&|l", &mysql_link, mysqli_link_class_entry, &query, &query_len, UG(utf8_conv), &resultmode) == FAILURE) { return; } if (resultmode != MYSQLI_USE_RESULT && resultmode != MYSQLI_STORE_RESULT) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for resultmode"); RETURN_FALSE; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID); if (!query_len) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty query"); RETURN_FALSE; } MYSQLI_DISABLE_MQ; if (mysql_real_query(mysql->mysql, query, query_len)) { MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } if (!mysql_field_count(mysql->mysql)) { /* no result set - not a SELECT */ if (MyG(report_mode) & MYSQLI_REPORT_INDEX) { php_mysqli_report_index(query, mysqli_server_status(mysql->mysql) TSRMLS_CC); } RETURN_TRUE; } result = (resultmode == MYSQLI_USE_RESULT) ? mysql_use_result(mysql->mysql) : mysql_store_result(mysql->mysql); if (!result) { php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql) TSRMLS_CC, "%s", mysql_error(mysql->mysql)); RETURN_FALSE; } if (MyG(report_mode) & MYSQLI_REPORT_INDEX) { php_mysqli_report_index(query, mysqli_server_status(mysql->mysql) TSRMLS_CC); } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = (void *)result; mysqli_resource->status = MYSQLI_STATUS_VALID; MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry);}/* }}} *//* {{{ proto object mysqli_get_warnings(object link) U */ PHP_FUNCTION(mysqli_get_warnings){ MY_MYSQL *mysql; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; MYSQLI_WARNING *w; 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_warning_count(mysql->mysql)) { w = php_get_warnings(mysql->mysql TSRMLS_CC); } else { RETURN_FALSE; } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = mysqli_resource->info = (void *)w; mysqli_resource->status = MYSQLI_STATUS_INITIALIZED; MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); }/* }}} *//* {{{ proto object mysqli_stmt_get_warnings(object link) U */ PHP_FUNCTION(mysqli_stmt_get_warnings){ MY_STMT *stmt; zval *stmt_link; MYSQLI_RESOURCE *mysqli_resource; MYSQLI_WARNING *w; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &stmt_link, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, "mysqli_stmt", MYSQLI_STATUS_VALID); if (mysqli_stmt_warning_count(stmt->stmt)) { w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC); } else { RETURN_FALSE; } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = mysqli_resource->info = (void *)w; mysqli_resource->status = MYSQLI_STATUS_INITIALIZED; MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry);}/* }}} */#ifdef HAVE_MYSQLI_SET_CHARSET/* {{{ proto bool mysqli_set_charset(object link, string csname) U sets client character set */PHP_FUNCTION(mysqli_set_charset){ MY_MYSQL *mysql; zval *mysql_link; char *csname; int csname_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &mysql_link, mysqli_link_class_entry, &csname, &csname_len, UG(utf8_conv)) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID); /* check unicode modus */ /* todo: we need also to support UCS2. This will not work when using SET NAMES */ if (UG(unicode) && (csname_len != 4 || strncasecmp(csname, "utf8", 4))) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Character set %s is not supported when running PHP with unicode.semantics=On.", csname); RETURN_FALSE; } if (mysql_set_character_set(mysql->mysql, csname)) { RETURN_FALSE; } RETURN_TRUE;}/* }}} */#endif#ifdef HAVE_MYSQLI_GET_CHARSET /* {{{ proto object mysqli_get_charset(object link) U returns a character set object */PHP_FUNCTION(mysqli_get_charset){ MY_MYSQL *mysql; zval *mysql_link; char *name = NULL, *collation = NULL, *dir = NULL; uint minlength, maxlength, number, state;#if !defined(HAVE_MYSQLND) MY_CHARSET_INFO cs;#else const MYSQLND_CHARSET *cs;#endif 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); object_init(return_value);#if !defined(HAVE_MYSQLND) mysql_get_character_set_info(mysql->mysql, &cs); name = (char *)cs.csname; collation = (char *)cs.name; dir = (char *)cs.dir; minlength = cs.mbminlen; maxlength = cs.mbmaxlen; number = cs.number; state = cs.state;#else cs = mysql->mysql->charset; name = cs->name; collation = cs->collation; minlength = cs->char_minlen; maxlength = cs->char_maxlen; number = cs->nr; state = 1; /* all charsets are compiled in */#endif if (UG(unicode)) { UChar *ustr = NULL; int ulen; zend_string_to_unicode(UG(utf8_conv), &ustr, &ulen, (name) ? name : "", (name) ? strlen(name) : 0 TSRMLS_CC); add_property_unicodel(return_value, "charset", ustr, ulen, 1); efree(ustr); zend_string_to_unicode(UG(utf8_conv), &ustr, &ulen, (collation) ? collation : "", (collation) ? strlen(collation) : 0 TSRMLS_CC); add_property_unicodel(return_value, "collation", ustr, ulen, 1); efree(ustr); zend_string_to_unicode(UG(utf8_conv), &ustr, &ulen, (dir) ? dir : "", (dir) ? strlen(dir) : 0 TSRMLS_CC); add_property_unicodel(return_value, "dir", ustr, ulen, 1); efree(ustr); } else { add_property_string(return_value, "charset", (name) ? (char *)name : "", 1); add_property_string(return_value, "collation",(collation) ? (char *)collation : "", 1); add_property_string(return_value, "dir", (dir) ? (char *)dir : "", 1); } add_property_long(return_value, "min_length", minlength); add_property_long(return_value, "max_length", maxlength); add_property_long(return_value, "number", number); add_property_long(return_value, "state", state);}/* }}} */#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 + -