📄 php_msql.c
字号:
} MSQL_GET_QUERY(result); RETVAL_LONG(msql_result ? msqlNumFields(msql_result) : 0);}/* }}} *//* {{{ php_msql_fetch_hash */static void php_msql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type){ pval *result, *arg2; m_result *msql_result; m_row msql_row; m_field *msql_field; m_query *msql_query; int num_fields; int i; switch (ZEND_NUM_ARGS()) { case 1: if (getParameters(ht, 1, &result)==FAILURE) { RETURN_FALSE; } if (!result_type) { result_type = MSQL_BOTH; } break; case 2: if (getParameters(ht, 2, &result, &arg2)==FAILURE) { RETURN_FALSE; } convert_to_long(arg2); result_type = Z_LVAL_P(arg2); break; default: WRONG_PARAM_COUNT; break; } MSQL_GET_QUERY(result); if (!msql_result || (msql_row=msqlFetchRow(msql_result))==NULL) { RETURN_FALSE; } num_fields = msqlNumFields(msql_result); if (array_init(return_value)==FAILURE) { RETURN_FALSE; } msqlFieldSeek(msql_result,0); for (msql_field=msqlFetchField(msql_result),i=0; msql_field; msql_field=msqlFetchField(msql_result),i++) { if (msql_row[i]) { char *data; int data_len; int should_copy; if (PG(magic_quotes_runtime)) { data = php_addslashes(msql_row[i], 0, &data_len, 0 TSRMLS_CC); should_copy = 0; } else { data = msql_row[i]; data_len = strlen(data); should_copy = 1; } if (result_type & MSQL_NUM) { add_index_stringl(return_value, i, data, data_len, should_copy); should_copy = 1; } if (result_type & MSQL_ASSOC) { add_assoc_stringl(return_value, msql_field->name, data, data_len, should_copy); } } else { /* NULL value. */ if (result_type & MSQL_NUM) { add_index_null(return_value, i); } if (result_type & MSQL_ASSOC) { add_assoc_null(return_value, msql_field->name); } } }}/* }}} *//* {{{ proto array msql_fetch_row(int query) Get a result row as an enumerated array */PHP_FUNCTION(msql_fetch_row){ php_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSQL_NUM);}/* }}} *//* {{{ proto object msql_fetch_object(int query [, int result_type]) Fetch a result row as an object */PHP_FUNCTION(msql_fetch_object){ php_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); 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 msql_fetch_array(int query [, int result_type]) Fetch a result row as an associative array */PHP_FUNCTION(msql_fetch_array){ php_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);}/* }}} *//* {{{ proto int msql_data_seek(int query, int row_number) Move internal result pointer */PHP_FUNCTION(msql_data_seek){ pval *result,*offset; m_result *msql_result; m_query *msql_query; if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &result, &offset)==FAILURE) { WRONG_PARAM_COUNT; } MSQL_GET_QUERY(result); convert_to_long(offset); if (!msql_result || Z_LVAL_P(offset)<0 || Z_LVAL_P(offset)>=msqlNumRows(msql_result)) { php_error(E_WARNING, "%s(): %d is invalid for mSQL query index %d", get_active_function_name(TSRMLS_C),Z_LVAL_P(offset),Z_LVAL_P(result)); RETURN_FALSE; } msqlDataSeek(msql_result,Z_LVAL_P(offset)); RETURN_TRUE;}/* }}} *//* {{{ php_msql_get_field_name */static char *php_msql_get_field_name(int field_type){ switch (field_type) {#if MSQL1 case INT_TYPE: return "int"; break; case CHAR_TYPE: return "char"; break; case REAL_TYPE: return "real"; break; case IDENT_TYPE: return "ident"; break; case NULL_TYPE: return "null"; break;#else case INT_TYPE: case UINT_TYPE: case CHAR_TYPE: case TEXT_TYPE: case REAL_TYPE: case NULL_TYPE: case DATE_TYPE: case TIME_TYPE: case MONEY_TYPE: return msqlTypeNames[field_type]; break;#endif default: return "unknown"; break; }}/* }}} *//* {{{ proto object msql_fetch_field(int query [, int field_offset]) Get column information from a result and return as an object */PHP_FUNCTION(msql_fetch_field){ pval *result, *field=NULL; m_result *msql_result; m_field *msql_field; m_query *msql_query; switch (ZEND_NUM_ARGS()) { case 1: if (getParameters(ht, 1, &result)==FAILURE) { RETURN_FALSE; } break; case 2: if (getParameters(ht, 2, &result, &field)==FAILURE) { RETURN_FALSE; } convert_to_long(field); default: WRONG_PARAM_COUNT; } MSQL_GET_QUERY(result); if (field) { if (Z_LVAL_P(field)<0 || Z_LVAL_P(field)>=msqlNumRows(msql_result)) { php_error(E_NOTICE, "%s(): Bad field offset specified", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } msqlFieldSeek(msql_result,Z_LVAL_P(field)); } if (!msql_result || (msql_field=msqlFetchField(msql_result))==NULL) { RETURN_FALSE; } if (object_init(return_value)==FAILURE) { RETURN_FALSE; } add_property_string(return_value, "name",(msql_field->name?msql_field->name:empty_string), 1); add_property_string(return_value, "table",(msql_field->table?msql_field->table:empty_string), 1); add_property_long(return_value, "not_null",IS_NOT_NULL(msql_field->flags));#if MSQL1 add_property_long(return_value, "primary_key",(msql_field->flags&PRI_KEY_FLAG?1:0));#else add_property_long(return_value, "unique",(msql_field->flags&UNIQUE_FLAG?1:0));#endif add_property_string(return_value, "type",php_msql_get_field_name(Z_TYPE_P(msql_field)), 1);}/* }}} *//* {{{ proto int msql_field_seek(int query, int field_offset) Set result pointer to a specific field offset */PHP_FUNCTION(msql_field_seek){ pval *result, *offset; m_result *msql_result; m_query *msql_query; if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &result, &offset)==FAILURE) { WRONG_PARAM_COUNT; } MSQL_GET_QUERY(result); convert_to_long(offset); if(!msql_result) { RETURN_FALSE; } if (Z_LVAL_P(offset)<0 || Z_LVAL_P(offset)>=msqlNumFields(msql_result)) { php_error(E_WARNING,"%s(): Field %d is invalid for mSQL query index %d", get_active_function_name(TSRMLS_C), Z_LVAL_P(offset),Z_LVAL_P(result)); RETURN_FALSE; } msqlFieldSeek(msql_result,Z_LVAL_P(offset)); RETURN_TRUE;}/* }}} */#define PHP_MSQL_FIELD_NAME 1#define PHP_MSQL_FIELD_TABLE 2#define PHP_MSQL_FIELD_LEN 3#define PHP_MSQL_FIELD_TYPE 4#define PHP_MSQL_FIELD_FLAGS 5/* {{{ php_msql_field_info */static void php_msql_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type){ pval *result, *field; m_result *msql_result; m_field *msql_field; m_query *msql_query; if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &result, &field)==FAILURE) { WRONG_PARAM_COUNT; } MSQL_GET_QUERY(result); if(!msql_result) { RETURN_FALSE; } convert_to_long(field); if (Z_LVAL_P(field)<0 || Z_LVAL_P(field)>=msqlNumFields(msql_result)) { php_error(E_WARNING,"%s(): Field %d is invalid for mSQL query index %d", get_active_function_name(TSRMLS_C),Z_LVAL_P(field),Z_LVAL_P(result)); RETURN_FALSE; } msqlFieldSeek(msql_result,Z_LVAL_P(field)); if ((msql_field=msqlFetchField(msql_result))==NULL) { RETURN_FALSE; } switch (entry_type) { case PHP_MSQL_FIELD_NAME: Z_STRLEN_P(return_value) = strlen(msql_field->name); Z_STRVAL_P(return_value) = estrndup(msql_field->name,Z_STRLEN_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; break; case PHP_MSQL_FIELD_TABLE: Z_STRLEN_P(return_value) = strlen(msql_field->table); Z_STRVAL_P(return_value) = estrndup(msql_field->table,Z_STRLEN_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; break; case PHP_MSQL_FIELD_LEN: Z_LVAL_P(return_value) = msql_field->length; Z_TYPE_P(return_value) = IS_LONG; break; case PHP_MSQL_FIELD_TYPE: Z_STRVAL_P(return_value) = estrdup(php_msql_get_field_name(Z_TYPE_P(msql_field))); Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; break; case PHP_MSQL_FIELD_FLAGS:#if MSQL1 if ((msql_field->flags&NOT_NULL_FLAG) && (msql_field->flags&PRI_KEY_FLAG)) { Z_STRVAL_P(return_value) = estrndup("primary key not null",20); Z_STRLEN_P(return_value) = 20; Z_TYPE_P(return_value) = IS_STRING; } else if (msql_field->flags&NOT_NULL_FLAG) { Z_STRVAL_P(return_value) = estrndup("not null",8); Z_STRLEN_P(return_value) = 8; Z_TYPE_P(return_value) = IS_STRING; } else if (msql_field->flags&PRI_KEY_FLAG) { Z_STRVAL_P(return_value) = estrndup("primary key",11); Z_STRLEN_P(return_value) = 11; Z_TYPE_P(return_value) = IS_STRING; } else { ZVAL_FALSE(return_value); }#else if ((msql_field->flags&NOT_NULL_FLAG) && (msql_field->flags&UNIQUE_FLAG)) { Z_STRVAL_P(return_value) = estrndup("unique not null",15); Z_STRLEN_P(return_value) = 15; Z_TYPE_P(return_value) = IS_STRING; } else if (msql_field->flags&NOT_NULL_FLAG) { Z_STRVAL_P(return_value) = estrndup("not null",8); Z_STRLEN_P(return_value) = 8; Z_TYPE_P(return_value) = IS_STRING; } else if (msql_field->flags&UNIQUE_FLAG) { Z_STRVAL_P(return_value) = estrndup("unique",6); Z_STRLEN_P(return_value) = 6; Z_TYPE_P(return_value) = IS_STRING; } else { ZVAL_FALSE(return_value); }#endif break; default: RETURN_FALSE; }}/* }}} *//* {{{ proto string msql_field_name(int query, int field_index) Get the name of the specified field in a result */PHP_FUNCTION(msql_field_name){ php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_NAME);}/* }}} *//* {{{ proto string msql_field_table(int query, int field_offset) Get name of the table the specified field is in */PHP_FUNCTION(msql_field_table){ php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_TABLE);}/* }}} *//* {{{ proto int msql_field_len(int query, int field_offet) Returns the length of the specified field */PHP_FUNCTION(msql_field_len){ php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_LEN);}/* }}} *//* {{{ proto string msql_field_type(int query, int field_offset) Get the type of the specified field in a result */PHP_FUNCTION(msql_field_type){ php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_TYPE);}/* }}} *//* {{{ proto string msql_field_flags(int query, int field_offset) Get the flags associated with the specified field in a result */PHP_FUNCTION(msql_field_flags){ php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_FLAGS);}/* }}} *//* {{{ proto int msql_free_result(int query) Free result memory */PHP_FUNCTION(msql_free_result){ pval *result; m_result *msql_result; m_query *msql_query; if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &result)==FAILURE) { WRONG_PARAM_COUNT; } MSQL_GET_QUERY(result); zend_list_delete(Z_LVAL_P(result)); RETURN_TRUE;}/* }}} *//* {{{ proto int msql_affected_rows(int query) Return number of affected rows */PHP_FUNCTION(msql_affected_rows) { pval *result; m_result *msql_result; m_query *msql_query; if(ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &result) == FAILURE) { WRONG_PARAM_COUNT; } MSQL_GET_QUERY(result); RETVAL_LONG(msql_query->af_rows);}/* }}} */#endif/* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -