📄 mysqli_api.c
字号:
}/* }}} *//* {{{ proto bool mysqli_stmt_close(object stmt) Close statement */PHP_FUNCTION(mysqli_stmt_close){ MY_STMT *stmt; zval *mysql_stmt; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID); mysqli_stmt_close(stmt->stmt, FALSE); stmt->stmt = NULL; php_clear_stmt_bind(stmt TSRMLS_CC); MYSQLI_CLEAR_RESOURCE(&mysql_stmt); RETURN_TRUE;}/* }}} *//* {{{ proto void mysqli_stmt_data_seek(object stmt, int offset) Move internal result pointer */PHP_FUNCTION(mysqli_stmt_data_seek){ MY_STMT *stmt; zval *mysql_stmt; long offset; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_stmt, mysqli_stmt_class_entry, &offset) == FAILURE) { return; } if (offset < 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset must be positive"); RETURN_FALSE; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID); mysql_stmt_data_seek(stmt->stmt, offset);}/* }}} *//* {{{ proto int mysqli_stmt_field_count(object stmt) { Return the number of result columns for the given statement */PHP_FUNCTION(mysqli_stmt_field_count){ MY_STMT *stmt; zval *mysql_stmt; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID); RETURN_LONG(mysql_stmt_field_count(stmt->stmt));}/* }}} *//* {{{ proto void mysqli_stmt_free_result(object stmt) Free stored result memory for the given statement handle */PHP_FUNCTION(mysqli_stmt_free_result) { MY_STMT *stmt; zval *mysql_stmt; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID); mysql_stmt_free_result(stmt->stmt);}/* }}} *//* {{{ proto mixed mysqli_stmt_insert_id(object stmt) Get the ID generated from the previous INSERT operation */PHP_FUNCTION(mysqli_stmt_insert_id){ MY_STMT *stmt; my_ulonglong rc; zval *mysql_stmt; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID); rc = mysql_stmt_insert_id(stmt->stmt); MYSQLI_RETURN_LONG_LONG(rc)}/* }}} *//* {{{ proto int mysqli_stmt_param_count(object stmt) { Return the number of parameter for the given statement */PHP_FUNCTION(mysqli_stmt_param_count){ MY_STMT *stmt; zval *mysql_stmt; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID); RETURN_LONG(mysql_stmt_param_count(stmt->stmt));}/* }}} *//* {{{ proto bool mysqli_stmt_reset(object stmt) reset a prepared statement */PHP_FUNCTION(mysqli_stmt_reset) { MY_STMT *stmt; zval *mysql_stmt; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID); if (mysql_stmt_reset(stmt->stmt)) { RETURN_FALSE; } RETURN_TRUE;}/* }}} *//* {{{ proto mixed mysqli_stmt_num_rows(object stmt) Return the number of rows in statements result set */PHP_FUNCTION(mysqli_stmt_num_rows){ MY_STMT *stmt; zval *mysql_stmt; my_ulonglong rc; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID); rc = mysql_stmt_num_rows(stmt->stmt); MYSQLI_RETURN_LONG_LONG(rc)}/* }}} *//* {{{ proto string mysqli_select_db(object link, string dbname) Select a MySQL database */PHP_FUNCTION(mysqli_select_db) { MY_MYSQL *mysql; zval *mysql_link; char *dbname; int dbname_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &dbname, &dbname_len) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID); if (!mysql_select_db(mysql->mysql, dbname)) { RETURN_TRUE; } MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE;}/* }}} *//* {{{ proto string mysqli_sqlstate(object link) Returns the SQLSTATE error from previous MySQL operation */PHP_FUNCTION(mysqli_sqlstate) { 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_STRING((char *)mysql_sqlstate(mysql->mysql),1);}/* }}} */#ifndef HAVE_MYSQLND/* {{{ proto bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])*/PHP_FUNCTION(mysqli_ssl_set){ MY_MYSQL *mysql; zval *mysql_link; char *ssl_parm[5]; int ssl_parm_len[5], i; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Osssss", &mysql_link, mysqli_link_class_entry, &ssl_parm[0], &ssl_parm_len[0], &ssl_parm[1], &ssl_parm_len[1], &ssl_parm[2], &ssl_parm_len[2], &ssl_parm[3], &ssl_parm_len[3], &ssl_parm[4], &ssl_parm_len[4]) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_INITIALIZED); for (i=0; i < 5; i++) { if (!ssl_parm_len[i]) { ssl_parm[i] = NULL; } } mysql_ssl_set(mysql->mysql, ssl_parm[0], ssl_parm[1], ssl_parm[2], ssl_parm[3], ssl_parm[4]); RETURN_TRUE;}/* }}} */#endif /* {{{ proto mixed mysqli_stat(object link) Get current system status */PHP_FUNCTION(mysqli_stat){ MY_MYSQL *mysql; zval *mysql_link; char *stat;#if defined(HAVE_MYSQLND) uint stat_len;#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);#if !defined(HAVE_MYSQLND) if ((stat = (char *)mysql_stat(mysql->mysql))) { RETURN_STRING(stat, 1);#else if (mysqlnd_stat(mysql->mysql, &stat, &stat_len) == PASS) { RETURN_STRINGL(stat, stat_len, 0);#endif } else { RETURN_FALSE; }}/* }}} */ /* {{{ proto int mysqli_stmt_attr_set(object stmt, long attr, long mode)*/PHP_FUNCTION(mysqli_stmt_attr_set){ MY_STMT *stmt; zval *mysql_stmt; long mode_in; ulong mode; ulong attr; int rc; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll", &mysql_stmt, mysqli_stmt_class_entry, &attr, &mode_in) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID); if (mode_in < 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "mode should be non-negative, %ld passed", mode_in); RETURN_FALSE; } mode = mode_in; if ((rc = mysql_stmt_attr_set(stmt->stmt, attr, (void *)&mode))) { RETURN_FALSE; } RETURN_TRUE;}/* }}} *//* {{{ proto int mysqli_stmt_attr_get(object stmt, long attr)*/PHP_FUNCTION(mysqli_stmt_attr_get){ MY_STMT *stmt; zval *mysql_stmt;#if MYSQL_VERSION_ID > 50099 my_bool value;#else ulong value = 0;#endif ulong attr; int rc; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_stmt, mysqli_stmt_class_entry, &attr) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID); if ((rc = mysql_stmt_attr_get(stmt->stmt, attr, &value))) { RETURN_FALSE; } RETURN_LONG((long)value);}/* }}} *//* {{{ proto int mysqli_stmt_errno(object stmt)*/PHP_FUNCTION(mysqli_stmt_errno){ MY_STMT *stmt; zval *mysql_stmt; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_INITIALIZED); RETURN_LONG(mysql_stmt_errno(stmt->stmt));}/* }}} *//* {{{ proto string mysqli_stmt_error(object stmt)*/PHP_FUNCTION(mysqli_stmt_error) { MY_STMT *stmt; zval *mysql_stmt; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_INITIALIZED); RETURN_STRING((char *)mysql_stmt_error(stmt->stmt),1);}/* }}} *//* {{{ proto mixed mysqli_stmt_init(object link) Initialize statement object*/PHP_FUNCTION(mysqli_stmt_init){ MY_MYSQL *mysql; MY_STMT *stmt; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; 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); stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT)); if (!(stmt->stmt = mysql_stmt_init(mysql->mysql))) { efree(stmt); RETURN_FALSE; } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->status = MYSQLI_STATUS_INITIALIZED; mysqli_resource->ptr = (void *)stmt; MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_stmt_class_entry);}/* }}} *//* {{{ proto bool mysqli_stmt_prepare(object stmt, string query) prepare server side statement with query*/PHP_FUNCTION(mysqli_stmt_prepare){ MY_STMT *stmt; zval *mysql_stmt; char *query; int query_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_stmt, mysqli_stmt_class_entry, &query, &query_len) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_INITIALIZED); if (mysql_stmt_prepare(stmt->stmt, query, query_len)) { MYSQLI_REPORT_STMT_ERROR(stmt->stmt); RETURN_FALSE; } /* change status */ MYSQLI_SET_STATUS(&mysql_stmt, MYSQLI_STATUS_VALID); RETURN_TRUE;}/* }}} *//* {{{ proto mixed mysqli_stmt_result_metadata(object stmt) return result set from statement */PHP_FUNCTION(mysqli_stmt_result_metadata){ MY_STMT *stmt; MYSQL_RES *result; zval *mysql_stmt; MYSQLI_RESOURCE *mysqli_resource; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID); if (!(result = mysql_stmt_result_metadata(stmt->stmt))){ MYSQLI_REPORT_STMT_ERROR(stmt->stmt); RETURN_FALSE; } 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 bool mysqli_stmt_store_result(stmt)*/PHP_FUNCTION(mysqli_stmt_store_result){ MY_STMT *stmt; zval *mysql_stmt;#ifndef HAVE_MYSQLND int i=0;#endif if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt", MYSQLI_STATUS_VALID); #ifndef HAVE_MYSQLND /* If the user wants to store the data and we have BLOBs/TEXTs we try to allocate not the maximal length of the type (which is 16MB even for LONGBLOB) but the maximal length of the field in the result set. If he/she has quite big BLOB/TEXT columns after calling store_result() the memory usage of PHP will double - but this is a known problem of the simple MySQL API ;) */ for (i = mysql_stmt_field_count(stmt->stmt) - 1; i >=0; --i) { if (stmt->s
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -