📄 php_fbsql.c
字号:
result = 0; } else if (fbcmdWarningsFound(md)) { FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md); char* emg = fbcemdAllErrorMessages(emd); if (FB_SQL_G(generateWarnings)) { if (emg) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Warning in statement: '%s' %s", sql, emg); else php_error_docref(NULL TSRMLS_CC, E_WARNING, "No message"); } link->errorText = strdup(emg); link->errorNo = fbcemdErrorCodeAtIndex(emd, 0); free(emg); fbcemdRelease(emd); result = 1; } return result;}/* }}} */static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link){ PHPFBResult* result = NULL; FBCMetaData* md, *meta; char* tp; char* fh; unsigned int sR = 1, cR = 0; meta = fbcdcExecuteDirectSQL(link->connection, sql); if (!mdOk(link, meta, sql)) { fbcmdRelease(meta); ZVAL_BOOL(return_value, 0) } else { if (fbcmdHasMetaDataArray(meta)) { sR = fbcmdMetaDataArrayCount(meta); md = (FBCMetaData*)fbcmdMetaDataAtIndex(meta, cR); } else md = meta; tp = fbcmdStatementType(md); if (tp == NULL) { fbcmdRelease(meta); ZVAL_BOOL(return_value, 1) } else if ((tp[0] == 'C') || (tp[0] == 'R')) { if (sR == 1 && md) fbcmdRelease(md); ZVAL_BOOL(return_value, 1) } else if ((fh = fbcmdFetchHandle(md)) || tp[0] == 'E' || (tp[0] == 'U' && fh)) { result = emalloc(sizeof(PHPFBResult)); result->link = link; result->fetchHandle = fh; result->ResultmetaData = meta; result->metaData = md; result->rowHandler = NULL; result->batchSize = FB_SQL_G(batchSize); result->rowCount = 0x7fffffff; result->columnCount = 0; result->rowIndex = 0; result->columnIndex = 0; result->row = NULL; result->array = NULL; result->list = NULL; result->selectResults = sR; result->currentResult = cR; result->lobMode = FBSQL_LOB_DIRECT; if (tp[0] != 'E') { result->columnCount = fbcmdColumnCount(md); result->fetchHandle = fh; result->batchSize = FB_SQL_G(batchSize); } else { char* r = fbcmdMessage(result->metaData); fbcrhConvertToOutputCharSet(fbcdcOutputCharacterSet(link->connection), (unsigned char *)r); if ((result->list = fbcplParse(r))) { result->rowCount = fbcplCount(result->list); result->columnCount = 7; } } ZEND_REGISTER_RESOURCE(return_value, result, le_result); } else if (tp[0] == 'I' || tp[0] == 'U') { if (tp[0] == 'I') link->insert_id = fbcmdRowIndex(md); if (sR == 1 && md) fbcmdRelease(md); ZVAL_BOOL(return_value, 1) } else if(tp[0] == 'A' || tp[0] == 'D') { if (sR == 1 && md) fbcmdRelease(md); ZVAL_BOOL(return_value, 1) } if (link) link->affectedRows = fbcmdRowCount(md); }}/* {{{ proto resource fbsql_query(string query [, resource link_identifier]) Send one or more SQL statements to the server and execute them */PHP_FUNCTION(fbsql_query){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **query; int id; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &query)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &query, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(query); phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink);}/* }}} *//* {{{ proto resource fbsql_db_query(string database_name, string query [, resource link_identifier]) Send one or more SQL statements to a specified database on the server */PHP_FUNCTION(fbsql_db_query){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **dbname, **query; int id; switch (ZEND_NUM_ARGS()) { case 2: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(2, &dbname, &query)==FAILURE) { RETURN_FALSE; } break; case 3: if (zend_get_parameters_ex(3, &dbname, &query, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(query); convert_to_string_ex(dbname); if (php_fbsql_select_db(Z_STRVAL_PP(dbname), phpLink TSRMLS_CC)) { phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink); } else { RETURN_FALSE; }}/* }}} *//* {{{ proto resource fbsql_list_dbs([resource link_identifier]) Retreive a list of all databases on the server */PHP_FUNCTION(fbsql_list_dbs){ PHPFBResult* phpResult; PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128); phpResult = emalloc(sizeof(PHPFBResult)); phpResult->link = phpLink; phpResult->fetchHandle = NULL; phpResult->rowHandler = NULL; phpResult->ResultmetaData = NULL; phpResult->metaData = NULL; phpResult->batchSize = FB_SQL_G(batchSize); phpResult->columnCount = 1; phpResult->rowIndex = 0; phpResult->columnIndex = 0; phpResult->row = NULL; phpResult->array = fbcehAvailableDatabases(phpLink->execHandler); phpResult->rowCount = fbaCount(phpResult->array); phpResult->list = NULL; ZEND_REGISTER_RESOURCE(return_value, phpResult, le_result);}/* }}} *//* {{{ proto resource fbsql_list_tables(string database [, int link_identifier]) Retreive a list of all tables from the specifoied database */PHP_FUNCTION(fbsql_list_tables){ char* sql = "select t0.\"table_name\"from information_schema.tables t0, information_schema.SCHEMATA t1 where t0.schema_pk = t1.schema_pk and t1.\"schema_name\" = current_schema order by \"table_name\";"; PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name; int id; char *databaseName; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &database_name)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); if (databaseName == NULL) { php_fbsql_select_db(FB_SQL_G(databaseName), phpLink TSRMLS_CC); } else { php_fbsql_select_db(databaseName, phpLink TSRMLS_CC); } phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink);}/* }}} *//* {{{ proto resource fbsql_list_fields(string database_name, string table_name [, resource link_identifier]) Retrieve a list of all fields for the specified database.table */PHP_FUNCTION(fbsql_list_fields){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name, **table_name; int id; char *databaseName, *tableName; char sql[1024]; switch (ZEND_NUM_ARGS()) { case 2: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(2, &database_name, &table_name)==FAILURE) { RETURN_FALSE; } break; case 3: if (zend_get_parameters_ex(3, &database_name, &table_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); convert_to_string_ex(table_name); tableName = Z_STRVAL_PP(table_name); if (!php_fbsql_select_db(databaseName, phpLink TSRMLS_CC)) { RETURN_FALSE; } if (snprintf(sql, sizeof(sql), "SELECT * FROM %s WHERE 1=0;", tableName) < 0) { RETURN_FALSE; } phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink);}/* }}} *//* {{{ proto string fbsql_error([resource link_identifier]) Returns the last error string */PHP_FUNCTION(fbsql_error){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); if (phpLink->errorText == NULL) { RETURN_FALSE; } else { RETURN_STRING(phpLink->errorText, 1); }}/* }}} *//* {{{ proto int fbsql_errno([resource link_identifier]) Returns the last error code */PHP_FUNCTION(fbsql_errno){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); RETURN_LONG(phpLink->errorNo);}/* }}} *//* {{{ proto bool fbsql_warnings([int flag]) Enable or disable FrontBase warnings */PHP_FUNCTION(fbsql_warnings){ int argc = ARG_COUNT(ht); zval **argv[1]; if ((argc < 0) || (argc > 1)) WRONG_PARAM_COUNT; if (zend_get_parameters_ex(argc, &argv[0])==FAILURE) RETURN_FALSE; if (argc >= 1) { convert_to_long_ex(argv[0]); FB_SQL_G(generateWarnings) = Z_LVAL_PP(argv[0]) != 0; } RETURN_BOOL(FB_SQL_G(generateWarnings));}/* }}} *//* {{{ proto int fbsql_affected_rows([resource link_identifier]) Get the number of rows affected by the last statement */PHP_FUNCTION(fbsql_affected_rows){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); RETURN_LONG(phpLink->affectedRows);}/* }}} *//* {{{ proto int fbsql_insert_id([resource link_identifier]) Get the internal index for the last insert statement */PHP_FUNCTION(fbsql_insert_id){ PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PAR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -