📄 php_sybase_db.c
字号:
/* {{{ proto string sybase_get_last_message(void) Returns the last message from server (over min_message_severity) */PHP_FUNCTION(sybase_get_last_message){ RETURN_STRING(php_sybase_module.server_message,1);}/* }}} *//* {{{ proto int sybase_num_rows(int result) Get number of rows in result */PHP_FUNCTION(sybase_num_rows){ zval **result_index; int type,id; sybase_result *result; if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &result_index) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(result_index); id = Z_LVAL_PP(result_index); result = (sybase_result *) zend_list_find(id,&type); if (type!=php_sybase_module.le_result) { php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id); RETURN_FALSE; } Z_LVAL_P(return_value) = result->num_rows; Z_TYPE_P(return_value) = IS_LONG;}/* }}} *//* {{{ proto int sybase_num_fields(int result) Get number of fields in result */PHP_FUNCTION(sybase_num_fields){ zval **result_index; int type,id; sybase_result *result; if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &result_index) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(result_index); id = Z_LVAL_PP(result_index); result = (sybase_result *) zend_list_find(id,&type); if (type!=php_sybase_module.le_result) { php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id); RETURN_FALSE; } Z_LVAL_P(return_value) = result->num_fields; Z_TYPE_P(return_value) = IS_LONG;}/* }}} *//* {{{ proto array sybase_fetch_row(int result) Get row as enumerated array */PHP_FUNCTION(sybase_fetch_row){ zval **sybase_result_index; int type,i,id; sybase_result *result; pval *field_content; if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &sybase_result_index)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(sybase_result_index); id = Z_LVAL_PP(sybase_result_index); result = (sybase_result *) zend_list_find(id,&type); if (type!=php_sybase_module.le_result) { php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id); RETURN_FALSE; } if (result->cur_row >= result->num_rows) { RETURN_FALSE; } array_init(return_value); for (i=0; i<result->num_fields; i++) { ZVAL_ADDREF(result->data[result->cur_row][i]); zend_hash_index_update(Z_ARRVAL_P(return_value), i, (void *) &result->data[result->cur_row][i], sizeof(pval *), NULL); } result->cur_row++;}/* }}} */static void php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS){ zval **sybase_result_index; sybase_result *result; int type; int i; if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &sybase_result_index) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(sybase_result_index); result = (sybase_result *) zend_list_find(Z_LVAL_PP(sybase_result_index),&type); if (type!=php_sybase_module.le_result) { php_error_docref(NULL TSRMLS_CC, E_WARNING,"%ld is not a Sybase result index", Z_LVAL_PP(sybase_result_index)); RETURN_FALSE; } if (result->cur_row >= result->num_rows) { RETURN_FALSE; } array_init(return_value); for (i=0; i<result->num_fields; i++) { ZVAL_ADDREF(result->data[result->cur_row][i]); zend_hash_index_update(Z_ARRVAL_P(return_value), i, (void *) &result->data[result->cur_row][i], sizeof(pval *), NULL); ZVAL_ADDREF(result->data[result->cur_row][i]); zend_hash_update(Z_ARRVAL_P(return_value), result->fields[i].name, strlen(result->fields[i].name)+1, (void *) &result->data[result->cur_row][i], sizeof(pval *), NULL); } result->cur_row++;}/* {{{ proto object sybase_fetch_object(int result) Fetch row as object */PHP_FUNCTION(sybase_fetch_object){ php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU); if (Z_TYPE_P(return_value)==IS_ARRAY) { Z_TYPE_P(return_value)=IS_OBJECT; Z_OBJPROP_P(return_value) = Z_ARRVAL_P(return_value); Z_OBJCE_P(return_value) = ZEND_STANDARD_CLASS_DEF_PTR; }}/* }}} *//* {{{ proto array sybase_fetch_array(int result) Fetch row as array */PHP_FUNCTION(sybase_fetch_array){ php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU);}/* }}} *//* {{{ proto bool sybase_data_seek(int result, int offset) Move internal row pointer */PHP_FUNCTION(sybase_data_seek){ zval **sybase_result_index, **offset; int type,id; sybase_result *result; if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &sybase_result_index, &offset) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(sybase_result_index); id = Z_LVAL_PP(sybase_result_index); result = (sybase_result *) zend_list_find(id,&type); if (type!=php_sybase_module.le_result) { php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id); RETURN_FALSE; } 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,"Sybase: Bad row offset"); RETURN_FALSE; } result->cur_row = Z_LVAL_PP(offset); RETURN_TRUE;}/* }}} */static char *php_sybase_get_field_name(int type){ switch (type) { case SYBBINARY: case SYBVARBINARY: return "blob"; break; case SYBCHAR: case SYBVARCHAR: case SYBTEXT: return "string"; case SYBDATETIME: case SYBDATETIME4: case SYBDATETIMN: return "datetime"; break; case SYBDECIMAL: case SYBFLT8: case SYBFLTN: case SYBREAL: case SYBNUMERIC: return "real"; break; case SYBINT1: case SYBINT2: case SYBINT4: case SYBINTN: return "int"; break; case SYBMONEY: case SYBMONEY4: case SYBMONEYN: return "money"; break; case SYBBIT: return "bit"; break; case SYBIMAGE: return "image"; break; default: return "unknown"; break; }}/* {{{ proto object sybase_fetch_field(int result [, int offset]) Get field information */PHP_FUNCTION(sybase_fetch_field){ zval **sybase_result_index, **offset; int type,id,field_offset; sybase_result *result; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &sybase_result_index) == FAILURE) { RETURN_FALSE; } field_offset=-1; break; case 2: if (zend_get_parameters_ex(2, &sybase_result_index, &offset) == FAILURE) { RETURN_FALSE; } convert_to_long_ex(offset); field_offset = Z_LVAL_PP(offset); break; default: WRONG_PARAM_COUNT; break; } convert_to_long_ex(sybase_result_index); id = Z_LVAL_PP(sybase_result_index); result = (sybase_result *) zend_list_find(id,&type); if (type!=php_sybase_module.le_result) { php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id); RETURN_FALSE; } 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,"Sybase: Bad column offset"); } RETURN_FALSE; } object_init(return_value); 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_sybase_get_field_name(Z_TYPE(result->fields[field_offset])), 1);}/* }}} *//* {{{ proto bool sybase_field_seek(int result, int offset) Set field offset */PHP_FUNCTION(sybase_field_seek){ zval **sybase_result_index, **offset; int type,id,field_offset; sybase_result *result; if (ZEND_NUM_ARGS() !=2 || zend_get_parameters_ex(2, &sybase_result_index, &offset) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(sybase_result_index); id = Z_LVAL_PP(sybase_result_index); result = (sybase_result *) zend_list_find(id,&type); if (type!=php_sybase_module.le_result) { php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id); RETURN_FALSE; } 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,"Sybase: Bad column offset"); RETURN_FALSE; } result->cur_field = field_offset; RETURN_TRUE;}/* }}} *//* {{{ proto string sybase_result(int result, int row, mixed field) Get result data */PHP_FUNCTION(sybase_result){ zval **row, **field, **sybase_result_index; int id,type,field_offset=0; sybase_result *result; if (ZEND_NUM_ARGS() !=3 || zend_get_parameters_ex(3, &sybase_result_index, &row, &field) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(sybase_result_index); id = Z_LVAL_PP(sybase_result_index); result = (sybase_result *) zend_list_find(id,&type); if (type!=php_sybase_module.le_result) { php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id); RETURN_FALSE; } 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,"Sybase: Bad row offset (%ld)", Z_LVAL_PP(row)); RETURN_FALSE; } switch(Z_TYPE_PP(field)) { case IS_STRING: { int i; for (i=0; i<result->num_fields; i++) { if (!strcasecmp(result->fields[i].name,Z_STRVAL_PP(field))) { field_offset = i; break; } } if (i>=result->num_fields) { /* no match found */ php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: %s field not found in result",Z_STRVAL_PP(field)); RETURN_FALSE; } break; } default: convert_to_long_ex(field); field_offset = Z_LVAL_PP(field); if (field_offset<0 || field_offset>=result->num_fields) { php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Bad column offset specified"); RETURN_FALSE; } break; } *return_value = *result->data[Z_LVAL_PP(row)][field_offset]; pval_copy_constructor(return_value);}/* }}} *//* {{{ proto int sybase_affected_rows([int link_id]) Get number of affected rows in last query */PHP_FUNCTION(sybase_affected_rows){ zval **sybase_link_index = NULL; sybase_link *sybase_ptr = NULL; int id = 0; int type = 0; switch(ZEND_NUM_ARGS()) { case 0: id = php_sybase_module.default_link; break; case 1: if (zend_get_parameters_ex(1, &sybase_link_index) == FAILURE) { RETURN_FALSE; } convert_to_long_ex(sybase_link_index); id = Z_LVAL_PP(sybase_link_index); break; default: WRONG_PARAM_COUNT; break; } sybase_ptr = (sybase_link *)zend_list_find(id, &type); if(type != php_sybase_module.le_link && type != php_sybase_module.le_plink) { php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase link index",id); RETURN_FALSE; } Z_LVAL_P(return_value) = DBCOUNT(sybase_ptr->link); Z_TYPE_P(return_value) = IS_LONG;} PHP_MINFO_FUNCTION(sybase){ char maxp[32], maxl[32]; if (php_sybase_module.max_persistent==-1) { snprintf(maxp, 31, "%ld/unlimited", php_sybase_module.num_persistent ); } else { snprintf(maxp, 31, "%ld/%ld", php_sybase_module.num_persistent, php_sybase_module.max_persistent); } maxp[31]=0; if (php_sybase_module.max_links==-1) { snprintf(maxl, 31, "%ld/unlimited", php_sybase_module.num_links ); } else { snprintf(maxl, 31, "%ld/%ld", php_sybase_module.num_links, php_sybase_module.max_links); } maxl[31]=0; php_info_print_table_start(); php_info_print_table_row(2, "Sybase Support", "enabled"); php_info_print_table_row(2, "Allow Persistent Links", (php_sybase_module.allow_persistent?"Yes":"No") ); php_info_print_table_row(2, "Persistent Links", maxp); php_info_print_table_row(2, "Total Links", maxl); php_info_print_table_row(2, "Application Name", php_sybase_module.appname ); php_info_print_table_row(2, "Client API Version", dbversion() ); php_info_print_table_end();}/* {{{ proto void sybase_min_error_severity(int severity) Sets the minimum error severity */PHP_FUNCTION(sybase_min_error_severity){ zval **severity; if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &severity) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(severity); php_sybase_module.min_error_severity = Z_LVAL_PP(severity);}/* }}} *//* {{{ proto void sybase_min_message_severity(int severity) Sets the minimum message severity */PHP_FUNCTION(sybase_min_message_severity){ zval **severity; if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &severity) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(severity); php_sybase_module.min_message_severity = Z_LVAL_PP(severity);}/* }}} */#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -