C API函數描述(O-R)

25.2.3.48. mysql_options()

int mysql_options(MYSQL *mysql, enum mysql_option option, const char *arg)

描述

可用於設置額外的連接選項,並影響連接的行爲。可多次調用該函數來設置數個選項。

應在mysql_init()之後、以及mysql_connect()mysql_real_connect()之前調用mysql_options()

選項參量指的是你打算設置的選項。Arg參量是選項的值。如果選項是整數,那麼arg應指向整數的值。

可能的選項值:

選項

參量類型

功能

MYSQL_INIT_COMMAND

char *

連接到MySQL服務器時將執行的命令。再次連接時將自動地再次執行。

MYSQL_OPT_COMPRESS

未使用

使用壓縮客戶端/服務器協議

MYSQL_OPT_CONNECT_TIMEOUT

unsigned int *

以秒爲單位的連接超時。

MYSQL_OPT_GUESS_CONNECTION

未使用

對於與libmysqld鏈接的應用程序,允許庫猜測是否使用嵌入式服務器或遠程服務器。“猜測”表示,如果設置了主機名但不是本地主機,將使用遠程服務器。該行爲是默認行爲。 可使用MYSQL_OPT_USE_EMBEDDED_CONNECTIONMYSQL_OPT_USE_REMOTE_CONNECTION覆蓋它。對於與libmysqlclient鏈接的應用程序,該選項將被忽略。

MYSQL_OPT_LOCAL_INFILE

指向單元的可選指針

如果未給定指針,或指針指向“unsigned int != 0”,將允許命令LOAD LOCAL INFILE

MYSQL_OPT_NAMED_PIPE

未使用

使用命名管道連接到NT平臺上的MySQL服務器。

MYSQL_OPT_PROTOCOL

unsigned int *

要使用的協議類型。應是mysql.h中定義的mysql_protocol_type的枚舉值之一。

MYSQL_OPT_READ_TIMEOUT

unsigned int *

從服務器讀取信息的超時(目前僅在Windows平臺的TCP/IP連接上有效)。

MYSQL_OPT_RECONNECT

my_bool *

如果發現連接丟失,啓動或禁止與服務器的自動再連接。從MySQL 5.0.3開始,默認情況下禁止再連接,這是5.0.13中的新選項,提供了一種以顯式方式設置再連接行爲的方法。

MYSQL_OPT_SET_CLIENT_IP

char *

對於與libmysqld鏈接的應用程序(具備鑑定支持特性的已編譯libmysqld,它意味着,出於鑑定目的,用戶將被視爲從指定的IP地址(指定爲字符串)進行連接。對於與libmysqlclient鏈接的應用程序,,該選項將被忽略。

MYSQL_OPT_USE_EMBEDDED_CONNECTION

未使用

對於與libmysqld鏈接的應用程序,對於連接來說,它將強制使用嵌入式服務器。對於與libmysqlclient鏈接的應用程序,,該選項將被忽略。

MYSQL_OPT_USE_REMOTE_CONNECTION

未使用

對於與libmysqld鏈接的應用程序,對於連接來說,它將強制使用遠程服務器。對於與libmysqlclient鏈接的應用程序,,該選項將被忽略。

MYSQL_OPT_USE_RESULT

未使用

不使用該選項。

MYSQL_OPT_WRITE_TIMEOUT

unsigned int *

寫入服務器的超時(目前僅在Windows平臺的TCP/IP連接上有效)。

MYSQL_READ_DEFAULT_FILE

char *

從命名選項文件而不是從my.cnf讀取選項。

MYSQL_READ_DEFAULT_GROUP

char *

my.cnf或用MYSQL_READ_DEFAULT_FILE指定的文件中的命名組讀取選項。

MYSQL_REPORT_DATA_TRUNCATION

my_bool *

通過MYSQL_BIND.error,對於預處理語句,允許或禁止通報數據截斷錯誤(默認爲禁止)。

MYSQL_SECURE_AUTH

my_bool*

是否連接到不支持密碼混編功能的服務器,在MySQL 4.1.1和更高版本中,使用了密碼混編功能。

MYSQL_SET_CHARSET_DIR

char*

指向包含字符集定義文件的目錄的路徑名。

MYSQL_SET_CHARSET_NAME

char*

用作默認字符集的字符集的名稱。

MYSQL_SHARED_MEMORY_BASE_NAME

char*

命名爲與服務器進行通信的共享內存對象。應與你打算連接的mysqld服務器使用的選項“-shared-memory-base-name”相同。

注意,如果使用了MYSQL_READ_DEFAULT_FILEMYSQL_READ_DEFAULT_GROUP,總會讀取客戶端組。

選項文件中指定的組可能包含下述選項:

選項

描述

connect-timeout

以秒爲單位的連接超時。在Linux平臺上,該超時也用作等待服務器首次迴應的時間。

compress

使用壓縮客戶端/服務器協議。

database

如果在連接命令中未指定數據庫,連接到該數據庫。

debug

調試選項。

disable-local-infile

禁止使用LOAD DATA LOCAL

host

默認主機名。

init-command

連接到MySQL服務器時將執行的命令。再次連接時將自動地再次執行。

interactive-timeout

等同於將CLIENT_INTERACTIVE指定爲mysql_real_connect()。請參見25.2.3.51節,“mysql_real_connect()”

local-infile[=(0|1)]

如果無參量或參量!= 0,那麼將允許使用LOAD DATA LOCAL

max_allowed_packet

客戶端能夠從服務器讀取的最大信息包。

multi-results

允許多語句執行或存儲程序的多個結果集。

multi-statements

允許客戶端在1個字符串內發送多條語句。(由“;”隔開)。

password

默認密碼。

pipe

使用命名管道連接到NT平臺上的MySQL服務器。

protocol={TCP | SOCKET | PIPE | MEMORY}

連接到服務器時將使用的協議。

port

默認端口號。

return-found-rows

通知mysql_info()返回發現的行,而不是使用UPDATE時更新的行

shared-memory-base-name=name

共享內存名稱,用於連接到服務器(默認爲"MYSQL")。

socket

默認的套接字文件。

user

默認用戶。

注意,“timeout”(超時)已被connect-timeout”(連接超時)取代,但爲了保持向後兼容,MySQL 5.1.2-alpha中仍支持“timeout”(超時)。

關於選項文件的更多信息,請參見4.3.2節,“使用選項文件”

返回值

成功時返回0。如果使用了未知選項,返回非0值。

示例:

MYSQL mysql;
 
mysql_init(&mysql);
mysql_options(&mysql,MYSQL_OPT_COMPRESS,0);
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"odbc");
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
    fprintf(stderr, "Failed to connect to database: Error: %s\n",
          mysql_error(&mysql));
}

該代碼請求客戶端使用壓縮客戶端/服務器協議,並從my.cnf文件的obdc部分讀取額外選項。

25.2.3.49. mysql_ping()

int mysql_ping(MYSQL *mysql)

描述

檢查與服務器的連接是否工作。如果連接丟失,將自動嘗試再連接。

該函數可被閒置了較長時間的客戶端使用,用以檢查服務器是否已關閉了連接,並在必要時再次連接。

返回值

如果與服務器的連接有效返回0。如果出現錯誤,返回非0值。返回的非0值不表示MySQL服務器本身是否已關閉,連接可能因其他原因終端,如網絡問題等。

錯誤

·        CR_COMMANDS_OUT_OF_SYNC

以不恰當的順序執行了命令。

·        CR_SERVER_GONE_ERROR

MySQL服務器不可用。

·        CR_UNKNOWN_ERROR

出現未知錯誤。

25.2.3.50. mysql_query()

int mysql_query(MYSQL *mysql, const char *query)

描述

執行由“Null終結的字符串”查詢指向的SQL查詢。正常情況下,字符串必須包含1SQL語句,而且不應爲語句添加終結分號(‘;’)或“\g”。如果允許多語句執行,字符串可包含多條由分號隔開的語句。請參見25.2.9節,“多查詢執行的C API處理”

mysql_query()不能用於包含二進制數據的查詢,應使用mysql_real_query()取而代之(二進制數據可能包含字符‘\0’mysql_query()會將該字符解釋爲查詢字符串結束)。

如果希望瞭解查詢是否應返回結果集,可使用mysql_field_count()進行檢查。請參見25.2.3.22節,“mysql_field_count()”

返回值

如果查詢成功,返回0。如果出現錯誤,返回非0值。

錯誤

·        CR_COMMANDS_OUT_OF_SYNC

以不恰當的順序執行了命令。

·        CR_SERVER_GONE_ERROR

MySQL服務器不可用。

·        CR_SERVER_LOST

在查詢過程中,與服務器的連接丟失。

·        CR_UNKNOWN_ERROR

出現未知錯誤。

25.2.3.51. mysql_real_connect()

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)

描述

mysql_real_connect()嘗試與運行在主機上的MySQL數據庫引擎建立連接。在你能夠執行需要有效MySQL連接句柄結構的任何其他API函數之前,mysql_real_connect()必須成功完成。

參數的指定方式如下:

·        1個參數應是已有MYSQL結構的地址。調用mysql_real_connect()之前,必須調用mysql_init()來初始化MYSQL結構。通過mysql_options()調用,可更改多種連接選項。請參見25.2.3.48節,“mysql_options()”

·        host”的值必須是主機名或IP地址。如果“host”是NULL或字符串"localhost",連接將被視爲與本地主機的連接。如果操作系統支持套接字(Unix)或命名管道(Windows),將使用它們而不是TCP/IP連接到服務器。

·        user”參數包含用戶的MySQL登錄ID。如果“user”NULL或空字符串"",用戶將被視爲當前用戶。在UNIX環境下,它是當前的登錄名。在Windows ODBC下,必須明確指定當前用戶名。請參見26.1.9.2節,“在Windows上配置MyODBC DSN”

·        passwd”參數包含用戶的密碼。如果“passwd”NULL僅會對該用戶的(擁有1個空密碼字段的)用戶表中的條目進行匹配檢查。這樣,數據庫管理員就能按特定的方式設置MySQL權限系統,根據用戶是否擁有指定的密碼,用戶將獲得不同的權限。

註釋:調用mysql_real_connect()之前,不要嘗試加密密碼,密碼加密將由客戶端API自動處理。

·        “db”是數據庫名稱。如果dbNULL連接會將默認的數據庫設爲該值。

·        如果“port”不是0其值將用作TCP/IP連接的端口號。注意,“host”參數決定了連接的類型。

·        如果unix_socket不是NULL,該字符串描述了應使用的套接字或命名管道。注意,“host”參數決定了連接的類型。

·        client_flag的值通常爲0,但是,也能將其設置爲下述標誌的組合,以允許特定功能:

標誌名稱

標誌描述

CLIENT_COMPRESS

使用壓縮協議。

CLIENT_FOUND_ROWS

返回發現的行數(匹配的),而不是受影響的行數。

CLIENT_IGNORE_SPACE

允許在函數名後使用空格。使所有的函數名成爲保留字。

CLIENT_INTERACTIVE

關閉連接之前,允許interactive_timeout(取代了wait_timeout)秒的不活動時間。客戶端的會話wait_timeout變量被設爲會話interactive_timeout變量的值。

CLIENT_LOCAL_FILES

允許LOAD DATA LOCAL處理功能。

CLIENT_MULTI_STATEMENTS

通知服務器,客戶端可能在單個字符串內發送多條語句(由‘;’隔開)。如果未設置該標誌,將禁止多語句執行。

CLIENT_MULTI_RESULTS

通知服務器,客戶端能夠處理來自多語句執行或存儲程序的多個結果集。如果設置了CLIENT_MULTI_STATEMENTS,將自動設置它。

CLIENT_NO_SCHEMA

禁止db_name.tbl_name.col_name語法。它用於ODBC。如果使用了該語法,它會使分析程序生成錯誤,在捕獲某些ODBC程序中的缺陷時,它很有用。

CLIENT_ODBC

客戶端是ODBC客戶端。它將mysqld變得更爲ODBC友好。

CLIENT_SSL

使用SSL(加密協議)。該選項不應由應用程序設置,它是在客戶端庫內部設置的。

對於某些參數,能夠從選項文件獲得取值,而不是取得mysql_real_connect()調用中的確切值。爲此,在調用mysql_real_connect()之前,應與MYSQL_READ_DEFAULT_FILEMYSQL_READ_DEFAULT_GROUP選項一起調用mysql_options()。隨後,在mysql_real_connect()調用中,爲準備從選項文件讀取值的每個參數指定“無值”值:

·        對於host,指定NULL值或空字符串("")

·        對於user,指定NULL值或空字符串。

·        對於passwd,指定NULL值。(對於密碼,mysql_real_connect()調用中的空字符串的值不能被選項文件中的字符串覆蓋,這是因爲,空字符串明確指明MySQL賬戶必須有空密碼)。

·        對於db,指定NULL值或空字符串

·        對於port,指定“0”值。

·        對於unix_socket指定NULL值。

對於某一參數,如果在選項文件中未發現值,將使用它的默認值,如本節前面介紹的那樣。

返回值

如果連接成功,返回MYSQL*連接句柄。如果連接失敗,返回NULL。對於成功的連接,返回值與第1個參數的值相同。

錯誤

·        CR_CONN_HOST_ERROR

無法連接到MySQL服務器。

·        CR_CONNECTION_ERROR

無法連接到本地MySQL服務器。

·        CR_IPSOCK_ERROR

無法創建IP套接字。

·        CR_OUT_OF_MEMORY

內存溢出。

·        CR_SOCKET_CREATE_ERROR

無法創建Unix套接字。

·        CR_UNKNOWN_HOST

無法找到主機名的IP地址。

·        CR_VERSION_ERROR

協議不匹配,起因於:試圖連接到具有特定客戶端庫(該客戶端庫使用了不同的協議版本)的服務器。如果使用很早的客戶端庫來建立與較新的服務器(未使用“--old-protocol”選項開始的)的連接,就會出現該情況。

·        CR_NAMEDPIPEOPEN_ERROR

無法在Windows平臺下創建命名管道。

·        CR_NAMEDPIPEWAIT_ERROR

Windows平臺下等待命名管道失敗。

·        CR_NAMEDPIPESETSTATE_ERROR

Windows平臺下獲取管道處理程序失敗。

·        CR_SERVER_LOST

如果connect_timeout > 0,而且在連接服務器時所用時間長於connect_timeout秒,或在執行init-command時服務器消失。

示例:

MYSQL mysql;
 
mysql_init(&mysql);
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"your_prog_name");
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
    fprintf(stderr, "Failed to connect to database: Error: %s\n",
          mysql_error(&mysql));
}

通過使用mysql_options()MySQL庫將讀取my.cnf文件的[client][your_prog_name]部分,以確保程序工作,即使某人以某種非標準的方式設置MySQL也同樣。

注意,一旦建立了連接,mysql_real_connect()將設置再連接標誌(MYSQL結構的組成部份)的值,在低於5.0.3版的API中,將其設爲“1”,在較新的版本中,將其設爲“0”。對於該標誌,值“1”表示,如果因連接丟失而無法執行語句,放棄前,將嘗試再次連接到服務器。從MySQL 5.0.13開始,可以對mysql_options()使用MYSQL_OPT_RECONNECT選項,對再連接行爲進行控制。

25.2.3.52. mysql_real_escape_string()

unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, const char *from, unsigned long length)

注意,mysql必須是有效的開放式連接。之所以需要它是因爲,轉義功能取決於服務器使用的字符集。

描述

該函數用於創建可在SQL語句中使用的合法SQL字符串。請參見9.1.1節,“字符串”

按照連接的當前字符集,將“from”中的字符串編碼爲轉義SQL字符串。將結果置於“to”中,並添加1個終結用NULL字節。編碼的字符爲NUL (ASCII 0)、‘\n’、‘\r’、‘\’、‘'’、‘"’、以及Control-Z(請參見9.1節,“文字值”)。(嚴格地講,MySQL僅需要反斜槓和引號字符,用於引用轉義查詢中的字符串。該函數能引用其他字符,從而使得它們在日誌文件中具有更好的可讀性)。

from”指向的字符串必須是長度字節“long”。必須爲“to”緩衝區分配至少length*2+1字節。在最壞的情況下,每個字符或許需要使用2個字節進行編碼,而且還需要終結Null字節。當mysql_real_escape_string()返回時,to”的內容是由Null終結的字符串。返回值是編碼字符串的長度,不包括終結用Null字符。

如果需要更改連接的字符集,應使用mysql_set_character_set()函數,而不是執行SET NAMES (SET CHARACTER SET)語句。mysql_set_character_set()的工作方式類似於SET NAMES,但它還能影響mysql_real_escape_string()所使用的字符集,而SET NAMES則不能。

示例:

char query[1000],*end;
 
end = strmov(query,"INSERT INTO test_table values(");
*end++ = '\'';
end += mysql_real_escape_string(&mysql, end,"What's this",11);
*end++ = '\'';
*end++ = ',';
*end++ = '\'';
end += mysql_real_escape_string(&mysql, end,"binary data: \0\r\n",16);
*end++ = '\'';
*end++ = ')';
 
if (mysql_real_query(&mysql,query,(unsigned int) (end - query)))
{
   fprintf(stderr, "Failed to insert row, Error: %s\n",
           mysql_error(&mysql));
}

該示例中使用的strmov()函數包含在mysqlclient庫中,工作方式與strcpy()類似,但會返回指向第1個參數終結用Null的指針。

返回值

置於“to”中的值的長度,不包括終結用Null字符。

錯誤

無。

25.2.3.53. mysql_real_query()

int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)

描述

執行由“query”指向的SQL查詢,它應是字符串長度字節“long”。正常情況下,字符串必須包含1SQL語句,而且不應爲語句添加終結分號(‘;’)或“\g”。如果允許多語句執行,字符串可包含由分號隔開的多條語句。請參見25.2.9節,“多查詢執行的C API處理”

對於包含二進制數據的查詢,必須使用mysql_real_query()而不是mysql_query(),這是因爲,二進制數據可能會包含\0’字符。此外,mysql_real_query()mysql_query()快,這是因爲它不會在查詢字符串上調用strlen()

如果希望知道查詢是否應返回結果集,可使用mysql_field_count()進行檢查25.2.3.22節,“mysql_field_count()”

返回值

如果查詢成功,返回0。如果出現錯誤,返回非0值。

錯誤

·        CR_COMMANDS_OUT_OF_SYNC

以不恰當的順序執行了命令。

·        CR_SERVER_GONE_ERROR

MySQL服務器不可用。

·        CR_SERVER_LOST

在查詢過程中,與服務器的連接丟失。

·        CR_UNKNOWN_ERROR

出現未知錯誤。

25.2.3.54. mysql_refresh()

int mysql_refresh(MYSQL *mysql, unsigned int options)

描述

該函數用於刷新表或高速緩衝,或復位複製服務器信息。連接的用戶必須具有RELOAD權限。

options”參量是一種位掩碼,由下述值的任意組合構成。能夠以“Or”(或)方式將多個值組合在一起,用一次調用執行多項操作。

·        REFRESH_GRANT

刷新授權表,與FLUSH PRIVILEGES類似。

·        REFRESH_LOG

刷新日誌,與FLUSH LOGS類似。

·        REFRESH_TABLES

刷新表高速緩衝,與FLUSH TABLES類似。

·        REFRESH_HOSTS

刷新主機高速緩衝,與FLUSH HOSTS類似。

·        REFRESH_STATUS

復位狀態變量,與FLUSH STATUS類似。

·        REFRESH_THREADS

刷新線程高速緩衝。

·        REFRESH_SLAVE

在從複製服務器上,復位主服務器信息,並重新啓動從服務器,與RESET SLAVE類似。

·        REFRESH_MASTER

在主複製服務器上,刪除二進制日誌索引中列出的二進制日誌文件,並截短索引文件,與RESET MASTER類似。

返回值

0表示成功,非0值表示出現錯誤。

錯誤

·        CR_COMMANDS_OUT_OF_SYNC

以不恰當的順序執行了命令。

·        CR_SERVER_GONE_ERROR

MySQL服務器不可用。

·        CR_SERVER_LOST

在查詢過程中,與服務器的連接丟失。

·        CR_UNKNOWN_ERROR

出現未知錯誤。

25.2.3.55. mysql_reload()

int mysql_reload(MYSQL *mysql)

描述

請求MySQL服務器重新加載授權表。連接的用戶必須具有RELOAD權限。

該函數已過時。最好使用mysql_query()來發出SQLFLUSH PRIVILEGES語句。

返回值

0表示成功,非0值表示出現錯誤。

錯誤

·        CR_COMMANDS_OUT_OF_SYNC

以不恰當的順序執行了命令。

·        CR_SERVER_GONE_ERROR

MySQL服務器不可用。

·        CR_SERVER_LOST

在查詢過程中,與服務器的連接丟失。

·        CR_UNKNOWN_ERROR

出現未知錯誤。

25.2.3.56. mysql_rollback()

my_bool mysql_rollback(MYSQL *mysql)

描述

回滾當前事務。

該函數的動作取決於completion_type系統變量的值。尤其是,如果completion_type的值爲“2”,終結事務後,服務器將執行釋放操作,並關閉客戶端連接。客戶端程序應調用mysql_close()從客戶端一側關閉連接。

返回值

如果成功,返回0,如果出現錯誤,返回非0值。

錯誤

無。

25.2.3.57. mysql_row_seek()

MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset)

描述

將行光標置於查詢結果集中的任意行。“offset”值是行偏移量,它應是mysql_row_tell()mysql_row_seek()返回的值。該值不是行編號,如果你打算按編號查找結果集中的行,請使用mysql_data_seek()

該函數要求在結果集的結構中包含查詢的全部結果,因此,mysql_row_seek()僅應與mysql_store_result()一起使用,而不是與mysql_use_result()

返回值

行光標的前一個值。該值可傳遞給對mysql_row_seek()的後續調用。

錯誤

無。

25.2.3.58. mysql_row_tell()

MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result)

描述

對於上一個mysql_fetch_row()返回行光標的當前位置。該值可用作mysql_row_seek()的參量。

僅應在mysql_store_result()之後,而不是mysql_use_result()之後使用mysql_row_tell()

返回值

行光標的當前偏移量。

錯誤

無。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章