📄 php_mysql.c
字号:
ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); Z_LVAL_P(return_value) = mysql_num_fields(mysql_result); Z_TYPE_P(return_value) = IS_LONG;}/* }}} *//* {{{ php_mysql_fetch_hash */static void php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type, int expected_args){ zval **result, **arg2; MYSQL_RES *mysql_result; MYSQL_ROW mysql_row; MYSQL_FIELD *mysql_field; mysql_row_length_type *mysql_row_lengths; int i; if (ZEND_NUM_ARGS() > expected_args) { WRONG_PARAM_COUNT; } switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &result)==FAILURE) { RETURN_FALSE; } if (!result_type) { result_type = MYSQL_BOTH; } break; case 2: if (zend_get_parameters_ex(2, &result, &arg2)==FAILURE) { RETURN_FALSE; } convert_to_long_ex(arg2); result_type = Z_LVAL_PP(arg2); break; default: WRONG_PARAM_COUNT; break; } if ((result_type & MYSQL_BOTH) == 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "The result type should be either MYSQL_NUM, MYSQL_ASSOC or MYSQL_BOTH."); } ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); if ((mysql_row=mysql_fetch_row(mysql_result))==NULL || (mysql_row_lengths=mysql_fetch_lengths(mysql_result))==NULL) { RETURN_FALSE; } if (array_init(return_value)==FAILURE) { RETURN_FALSE; } mysql_field_seek(mysql_result, 0); for (mysql_field=mysql_fetch_field(mysql_result), i=0; mysql_field; mysql_field=mysql_fetch_field(mysql_result), i++) { if (mysql_row[i]) { char *data; int data_len; int should_copy; if (PG(magic_quotes_runtime)) { data = php_addslashes(mysql_row[i], mysql_row_lengths[i],&data_len, 0 TSRMLS_CC); should_copy = 0; } else { data = mysql_row[i]; data_len = mysql_row_lengths[i]; should_copy = 1; } if (result_type & MYSQL_NUM) { add_index_stringl(return_value, i, data, data_len, should_copy); should_copy = 1; } if (result_type & MYSQL_ASSOC) { add_assoc_stringl(return_value, mysql_field->name, data, data_len, should_copy); } } else { /* NULL value. */ if (result_type & MYSQL_NUM) { add_index_null(return_value, i); } if (result_type & MYSQL_ASSOC) { add_assoc_null(return_value, mysql_field->name); } } }}/* }}} *//* {{{ proto array mysql_fetch_row(resource result) Gets a result row as an enumerated array */PHP_FUNCTION(mysql_fetch_row){ php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_NUM, 1);}/* }}} *//* {{{ proto object mysql_fetch_object(resource result [, int result_type]) Fetch a result row as an object */PHP_FUNCTION(mysql_fetch_object){ php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_ASSOC, 2); if (Z_TYPE_P(return_value) == IS_ARRAY) { object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value)); }}/* }}} *//* {{{ proto array mysql_fetch_array(resource result [, int result_type]) Fetch a result row as an array (associative, numeric or both) */PHP_FUNCTION(mysql_fetch_array){ php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 2);}/* }}} *//* {{{ proto array mysql_fetch_assoc(resource result) Fetch a result row as an associative array */PHP_FUNCTION(mysql_fetch_assoc){ php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_ASSOC, 1);}/* }}} *//* {{{ proto bool mysql_data_seek(resource result, int row_number) Move internal result pointer */PHP_FUNCTION(mysql_data_seek){ zval **result, **offset; MYSQL_RES *mysql_result; if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result, &offset)==FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); convert_to_long_ex(offset); if (Z_LVAL_PP(offset)<0 || Z_LVAL_PP(offset)>=(int)mysql_num_rows(mysql_result)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset %ld is invalid for MySQL result index %ld (or the query data is unbuffered)", Z_LVAL_PP(offset), Z_LVAL_PP(result)); RETURN_FALSE; } mysql_data_seek(mysql_result, Z_LVAL_PP(offset)); RETURN_TRUE;}/* }}} *//* {{{ proto array mysql_fetch_lengths(resource result) Gets max data size of each column in a result */PHP_FUNCTION(mysql_fetch_lengths){ zval **result; MYSQL_RES *mysql_result; mysql_row_length_type *lengths; int num_fields; int i; if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); if ((lengths=mysql_fetch_lengths(mysql_result))==NULL) { RETURN_FALSE; } if (array_init(return_value)==FAILURE) { RETURN_FALSE; } num_fields = mysql_num_fields(mysql_result); for (i=0; i<num_fields; i++) { add_index_long(return_value, i, lengths[i]); }}/* }}} *//* {{{ php_mysql_get_field_name */static char *php_mysql_get_field_name(int field_type){ switch(field_type) { case FIELD_TYPE_STRING: case FIELD_TYPE_VAR_STRING: return "string"; break;#ifdef MYSQL_HAS_TINY case FIELD_TYPE_TINY:#endif case FIELD_TYPE_SHORT: case FIELD_TYPE_LONG: case FIELD_TYPE_LONGLONG: case FIELD_TYPE_INT24: return "int"; break; case FIELD_TYPE_FLOAT: case FIELD_TYPE_DOUBLE: case FIELD_TYPE_DECIMAL:#ifdef FIELD_TYPE_NEWDECIMAL case FIELD_TYPE_NEWDECIMAL:#endif return "real"; break; case FIELD_TYPE_TIMESTAMP: return "timestamp"; break;#ifdef MYSQL_HAS_YEAR case FIELD_TYPE_YEAR: return "year"; break;#endif case FIELD_TYPE_DATE:#ifdef FIELD_TYPE_NEWDATE case FIELD_TYPE_NEWDATE:#endif return "date"; break; case FIELD_TYPE_TIME: return "time"; break; case FIELD_TYPE_SET: return "set"; break; case FIELD_TYPE_ENUM: return "enum"; break;#ifdef FIELD_TYPE_GEOMETRY case FIELD_TYPE_GEOMETRY: return "geometry"; break;#endif case FIELD_TYPE_DATETIME: return "datetime"; break; case FIELD_TYPE_TINY_BLOB: case FIELD_TYPE_MEDIUM_BLOB: case FIELD_TYPE_LONG_BLOB: case FIELD_TYPE_BLOB: return "blob"; break; case FIELD_TYPE_NULL: return "null"; break; default: return "unknown"; break; }}/* }}} *//* {{{ proto object mysql_fetch_field(resource result [, int field_offset]) Gets column information from a result and return as an object */PHP_FUNCTION(mysql_fetch_field){ zval **result, **field=NULL; MYSQL_RES *mysql_result; MYSQL_FIELD *mysql_field; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &result)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &result, &field)==FAILURE) { RETURN_FALSE; } convert_to_long_ex(field); break; default: WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); if (field) { if (Z_LVAL_PP(field)<0 || Z_LVAL_PP(field)>=(int)mysql_num_fields(mysql_result)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad field offset"); RETURN_FALSE; } mysql_field_seek(mysql_result, Z_LVAL_PP(field)); } if ((mysql_field=mysql_fetch_field(mysql_result))==NULL) { RETURN_FALSE; } if (object_init(return_value)==FAILURE) { RETURN_FALSE; } add_property_string(return_value, "name",(mysql_field->name?mysql_field->name:empty_string), 1); add_property_string(return_value, "table",(mysql_field->table?mysql_field->table:empty_string), 1); add_property_string(return_value, "def",(mysql_field->def?mysql_field->def:empty_string), 1); add_property_long(return_value, "max_length", mysql_field->max_length); add_property_long(return_value, "not_null", IS_NOT_NULL(mysql_field->flags)?1:0); add_property_long(return_value, "primary_key", IS_PRI_KEY(mysql_field->flags)?1:0); add_property_long(return_value, "multiple_key",(mysql_field->flags&MULTIPLE_KEY_FLAG?1:0)); add_property_long(return_value, "unique_key",(mysql_field->flags&UNIQUE_KEY_FLAG?1:0)); add_property_long(return_value, "numeric", IS_NUM(Z_TYPE_P(mysql_field))?1:0); add_property_long(return_value, "blob", IS_BLOB(mysql_field->flags)?1:0); add_property_string(return_value, "type", php_mysql_get_field_name(Z_TYPE_P(mysql_field)), 1); add_property_long(return_value, "unsigned",(mysql_field->flags&UNSIGNED_FLAG?1:0)); add_property_long(return_value, "zerofill",(mysql_field->flags&ZEROFILL_FLAG?1:0));}/* }}} *//* {{{ proto bool mysql_field_seek(resource result, int field_offset) Sets result pointer to a specific field offset */PHP_FUNCTION(mysql_field_seek){ zval **result, **offset; MYSQL_RES *mysql_result; if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result, &offset)==FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); convert_to_long_ex(offset); if (Z_LVAL_PP(offset)<0 || Z_LVAL_PP(offset)>=(int)mysql_num_fields(mysql_result)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field %ld is invalid for MySQL result index %ld", Z_LVAL_PP(offset), Z_LVAL_PP(result)); RETURN_FALSE; } mysql_field_seek(mysql_result, Z_LVAL_PP(offset)); RETURN_TRUE;}/* }}} */#define PHP_MYSQL_FIELD_NAME 1#define PHP_MYSQL_FIELD_TABLE 2#define PHP_MYSQL_FIELD_LEN 3#define PHP_MYSQL_FIELD_TYPE 4#define PHP_MYSQL_FIELD_FLAGS 5 /* {{{ php_mysql_field_info */static void php_mysql_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type){ zval **result, **field; MYSQL_RES *mysql_result; MYSQL_FIELD *mysql_field = {0}; char buf[512]; int len; if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result, &field)==FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); convert_to_long_ex(field); if (Z_LVAL_PP(field)<0 || Z_LVAL_PP(field)>=(int)mysql_num_fields(mysql_result)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field %ld is invalid for MySQL result index %ld", Z_LVAL_PP(field), Z_LVAL_PP(result)); RETURN_FALSE; } mysql_field_seek(mysql_result, Z_LVAL_PP(field)); if ((mysql_field=mysql_fetch_field(mysql_result))==NULL) { RETURN_FALSE; } switch (entry_type) { case PHP_MYSQL_FIELD_NAME: Z_STRLEN_P(return_value) = strlen(mysql_field->name); Z_STRVAL_P(return_value) = estrndup(mysql_field->name, Z_STRLEN_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; break; case PHP_MYSQL_FIELD_TABLE: Z_STRLEN_P(return_value) = strlen(mysql_field->table); Z_STRVAL_P(return_value) = estrndup(mysql_field->table, Z_STRLEN_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; break; case PHP_MYSQL_FIELD_LEN: Z_LVAL_P(return_value) = mysql_field->length; Z_TYPE_P(return_value) = IS_LONG; break; case PHP_MYSQL_FIELD_TYPE: Z_STRVAL_P(return_value) = php_mysql_get_field_name(Z_TYPE_P(mysql_field)); Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value)); Z_STRVAL_P(return_value) = estrndup(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; break; case PHP_MYSQL_FIELD_FLAGS: memcpy(buf, "", sizeof(""));#ifdef IS_NOT_NULL if (IS_NOT_NULL(mysql_field->flags)) { strcat(buf, "not_null "); }#endif#ifdef IS_PRI_KEY if (IS_PRI_KEY(mysql_field->flags)) { strcat(buf, "primary_key "); }#endif#ifdef UNIQUE_KEY_FLAG if (mysql_field->flags&UNIQUE_KEY_FLAG) { strcat(buf, "unique_key "); }#endif#ifdef MULTIPLE_KEY_FLAG if (mysql_field->flags&MULTIPLE_KEY_FLAG) { strcat(buf, "multiple_key "); }#endif#ifdef IS_BLOB if (IS_BLOB(mysql_field->flags)) { strcat(buf, "blob "); }#endif#ifdef UNSIGNED_FLAG if (mysql_field->flags&UNSIGNED_FLAG) { strcat(buf, "unsigned "); }#endif#ifdef ZEROFILL_FLAG if (mysql_field->flags&ZEROFILL_FLAG) { strcat(buf, "zerofill "); }#endif#ifdef BINARY_FLAG if (mysql_field->flags&BINARY_FLAG) { strcat(buf, "binary "); }#endif#ifdef ENUM_FLAG if (mysql_field->flags&ENUM_FLAG) { strcat(buf, "enum "); }#endif#ifdef SET_FLAG if (mysql_field->flags&SET_FLAG) { strcat(buf, "set "); }#endif#ifdef AUTO_INCREMENT_FLAG if (mysql_field->flags&AUTO_INCREMENT_FLAG) { strcat(buf, "auto_increment "); }#endif#ifdef TIMESTAMP_FLAG if (mysql_field->flags&TIMESTAMP_FLAG) { strcat(buf, "timestamp "); }#endif len = strlen(buf); /* remove trailing space, if present */ if (len && buf[len-1] == ' ') { buf[len-1] = 0; len--; } Z_STRLEN_P(return_value) = len; Z_STRVAL_P(return_value) = estrndup(buf, len); Z_TYPE_P(return_value) = IS_STRING; break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -