📄 php_mssql.c
字号:
int i; if (ZEND_NUM_ARGS() > expected_args) { WRONG_PARAM_COUNT; } switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) { RETURN_FALSE; } if (!result_type) { result_type = MSSQL_BOTH; } break; case 2: if (zend_get_parameters_ex(2, &mssql_result_index, &resulttype)==FAILURE) { RETURN_FALSE; } convert_to_long_ex(resulttype); result_type = Z_LVAL_PP(resulttype); break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result); if (MS_SQL_G(server_message)) { STR_FREE(MS_SQL_G(server_message)); MS_SQL_G(server_message) = NULL; } if (result->cur_row >= result->num_rows) { RETURN_FALSE; } if (array_init(return_value)==FAILURE) { RETURN_FALSE; } for (i=0; i<result->num_fields; i++) { if (Z_TYPE(result->data[result->cur_row][i]) != IS_NULL) { char *data; int data_len; int should_copy; if (Z_TYPE(result->data[result->cur_row][i]) == IS_STRING) { if (PG(magic_quotes_runtime)) { data = php_addslashes(Z_STRVAL(result->data[result->cur_row][i]), Z_STRLEN(result->data[result->cur_row][i]), &data_len, 0 TSRMLS_CC); should_copy = 0; } else { data = Z_STRVAL(result->data[result->cur_row][i]); data_len = Z_STRLEN(result->data[result->cur_row][i]); should_copy = 1; } if (result_type & MSSQL_NUM) { add_index_stringl(return_value, i, data, data_len, should_copy); should_copy = 1; } if (result_type & MSSQL_ASSOC) { add_assoc_stringl(return_value, result->fields[i].name, data, data_len, should_copy); } } else if (Z_TYPE(result->data[result->cur_row][i]) == IS_LONG) { if (result_type & MSSQL_NUM) add_index_long(return_value, i, Z_LVAL(result->data[result->cur_row][i])); if (result_type & MSSQL_ASSOC) add_assoc_long(return_value, result->fields[i].name, Z_LVAL(result->data[result->cur_row][i])); } else if (Z_TYPE(result->data[result->cur_row][i]) == IS_DOUBLE) { if (result_type & MSSQL_NUM) add_index_double(return_value, i, Z_DVAL(result->data[result->cur_row][i])); if (result_type & MSSQL_ASSOC) add_assoc_double(return_value, result->fields[i].name, Z_DVAL(result->data[result->cur_row][i])); } } else { if (result_type & MSSQL_NUM) add_index_null(return_value, i); if (result_type & MSSQL_ASSOC) add_assoc_null(return_value, result->fields[i].name); } } result->cur_row++;}/* {{{ proto array mssql_fetch_row(resource result_id) Returns an array of the current row in the result set specified by result_id */PHP_FUNCTION(mssql_fetch_row){ php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSSQL_NUM, 1);}/* }}} *//* {{{ proto object mssql_fetch_object(resource result_id [, int result_type]) Returns a psuedo-object of the current row in the result set specified by result_id */PHP_FUNCTION(mssql_fetch_object){ php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSSQL_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 mssql_fetch_array(resource result_id [, int result_type]) Returns an associative array of the current row in the result set specified by result_id */PHP_FUNCTION(mssql_fetch_array){ php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSSQL_BOTH, 2);}/* }}} *//* {{{ proto array mssql_fetch_assoc(resource result_id) Returns an associative array of the current row in the result set specified by result_id */PHP_FUNCTION(mssql_fetch_assoc){ php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSSQL_ASSOC, 1);}/* }}} *//* {{{ proto bool mssql_data_seek(resource result_id, int offset) Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number */PHP_FUNCTION(mssql_data_seek){ zval **mssql_result_index, **offset; mssql_result *result; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result); convert_to_long_ex(offset); if (Z_LVAL_PP(offset)<0 || Z_LVAL_PP(offset)>=result->num_rows) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad row offset"); RETURN_FALSE; } result->cur_row = Z_LVAL_PP(offset); RETURN_TRUE;}/* }}} */static char *php_mssql_get_field_name(int type){ switch (type) { case SQLBINARY: case SQLVARBINARY: return "blob"; break; case SQLCHAR: case SQLVARCHAR: return "char"; break; case SQLTEXT: return "text"; break; case SQLDATETIME: case SQLDATETIM4: case SQLDATETIMN: return "datetime"; break; case SQLDECIMAL: case SQLFLT4: case SQLFLT8: case SQLFLTN: return "real"; break; case SQLINT1: case SQLINT2: case SQLINT4: case SQLINTN: return "int"; break; case SQLNUMERIC: return "numeric"; break; case SQLMONEY: case SQLMONEY4: case SQLMONEYN: return "money"; break; case SQLBIT: return "bit"; break; case SQLIMAGE: return "image"; break;#ifdef SQLUNIQUE case SQLUNIQUE: return "uniqueidentifier"; break;#endif default: return "unknown"; break; }}/* {{{ proto object mssql_fetch_field(resource result_id [, int offset]) Gets information about certain fields in a query result */PHP_FUNCTION(mssql_fetch_field){ zval **mssql_result_index, **offset; int field_offset; mssql_result *result; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) { RETURN_FALSE; } field_offset=-1; break; case 2: if (zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) { RETURN_FALSE; } convert_to_long_ex(offset); field_offset = Z_LVAL_PP(offset); break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result); if (field_offset==-1) { field_offset = result->cur_field; result->cur_field++; } if (field_offset<0 || field_offset >= result->num_fields) { if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset"); } RETURN_FALSE; } if (object_init(return_value)==FAILURE) { RETURN_FALSE; } add_property_string(return_value, "name",result->fields[field_offset].name, 1); add_property_long(return_value, "max_length",result->fields[field_offset].max_length); add_property_string(return_value, "column_source",result->fields[field_offset].column_source, 1); add_property_long(return_value, "numeric", result->fields[field_offset].numeric); add_property_string(return_value, "type", php_mssql_get_field_name(Z_TYPE(result->fields[field_offset])), 1);}/* }}} *//* {{{ proto int mssql_field_length(resource result_id [, int offset]) Get the length of a MS-SQL field */PHP_FUNCTION(mssql_field_length){ zval **mssql_result_index, **offset; int field_offset; mssql_result *result; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) { RETURN_FALSE; } field_offset=-1; break; case 2: if (zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) { RETURN_FALSE; } convert_to_long_ex(offset); field_offset = Z_LVAL_PP(offset); break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result); if (field_offset==-1) { field_offset = result->cur_field; result->cur_field++; } if (field_offset<0 || field_offset >= result->num_fields) { if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset"); } RETURN_FALSE; } Z_LVAL_P(return_value) = result->fields[field_offset].max_length; Z_TYPE_P(return_value) = IS_LONG;}/* }}} *//* {{{ proto string mssql_field_name(resource result_id [, int offset]) Returns the name of the field given by offset in the result set given by result_id */PHP_FUNCTION(mssql_field_name){ zval **mssql_result_index, **offset; int field_offset; mssql_result *result; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) { RETURN_FALSE; } field_offset=-1; break; case 2: if (zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) { RETURN_FALSE; } convert_to_long_ex(offset); field_offset = Z_LVAL_PP(offset); break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result); if (field_offset==-1) { field_offset = result->cur_field; result->cur_field++; } if (field_offset<0 || field_offset >= result->num_fields) { if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset"); } RETURN_FALSE; } Z_STRVAL_P(return_value) = estrdup(result->fields[field_offset].name); Z_STRLEN_P(return_value) = strlen(result->fields[field_offset].name); Z_TYPE_P(return_value) = IS_STRING;}/* }}} *//* {{{ proto string mssql_field_type(resource result_id [, int offset]) Returns the type of a field */PHP_FUNCTION(mssql_field_type){ zval **mssql_result_index, **offset; int field_offset; mssql_result *result; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) { RETURN_FALSE; } field_offset=-1; break; case 2: if (zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) { RETURN_FALSE; } convert_to_long_ex(offset); field_offset = Z_LVAL_PP(offset); break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result); if (field_offset==-1) { field_offset = result->cur_field; result->cur_field++; } if (field_offset<0 || field_offset >= result->num_fields) { if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset"); } RETURN_FALSE; } Z_STRVAL_P(return_value) = estrdup(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset]))); Z_STRLEN_P(return_value) = strlen(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset]))); Z_TYPE_P(return_value) = IS_STRING;}/* }}} *//* {{{ proto bool mssql_field_seek(int result_id, int offset) Seeks to the specified field offset */PHP_FUNCTION(mssql_field_seek){ zval **mssql_result_index, **offset; int field_offset; mssql_result *result; if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result); convert_to_long_ex(offset); field_offset = Z_LVAL_PP(offset); if (field_offset<0 || field_offset >= result->num_fields) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset"); RETURN_FALSE; } result->cur_field = field_offset; RETURN_TRUE;}/* }}} *//* {{{ proto string mssql_result(resource result_id, int row, mixed field) Returns the contents of one cell from a MS-SQL result set */PHP_FUNCTION(mssql_result){ zval **row, **field, **mssql_result_index; int field_offset=0; mssql_result *result; if (ZEND_NUM_ARGS()!=3 || zend_get_parameters_ex(3, &mssql_result_index, &row, &field)==FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result); convert_to_long_ex(row); if (Z_LVAL_PP(row) < 0 || Z_LVAL_PP(row) >= result->num_rows) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad row offset (%ld)", Z_LVAL_PP(row)); RETURN_FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -