MySQL入門之預處理語句的使用

  mysql客戶端/服務器協(xié)議提供了預處理語句。該功能采用了由mysql_stmt_init()初始化函數(shù)返回的mysql_stmt語句處理程序數(shù)據(jù)結(jié)構(gòu)。對于多次執(zhí)行的語句,預處理執(zhí)行是一種有效的方式。首先對語句進行解析,為執(zhí)行作好準備。接下來,在以后使用初始化函數(shù)返回的語句句柄執(zhí)行一次或多次。

  對于多次執(zhí)行的語句,預處理執(zhí)行比直接執(zhí)行快,主要原因在于,僅對查詢執(zhí)行一次解析操作。在直接執(zhí)行的情況下,每次執(zhí)行語句時,均將進行查詢。此外,由于每次執(zhí)行預處理語句時僅需發(fā)送參數(shù)的數(shù)據(jù),從而減少了網(wǎng)絡通信量。?
  預處理語句的另一個優(yōu)點是,它采用了二進制協(xié)議,從而使得客戶端和服務器之間的數(shù)據(jù)傳輸更有效率。

  類似于Oracle里面的占位符概念!!?
  ?
一般步驟:

用mysql_stmt_init()創(chuàng)建預處理語句句柄。要想在服務器上準備預處理語句,可調(diào)用mysql_stmt_prepare(),并為其傳遞包含SQL語句的字符串 如果語句生成了結(jié)果集,調(diào)用mysql_stmt_result_metadata()以獲得結(jié)果集元數(shù)據(jù)。雖然與包含查詢返回列的結(jié)果集不同,該元數(shù)據(jù)本身也采用了結(jié)果集的形式。元數(shù)據(jù)結(jié)果集指明了結(jié)果中包含多少列,并包含每一列的信息。 使用mysql_stmt_bind_param()設置任何參數(shù)的值。必須設置所有參數(shù)。否則,語句執(zhí)行將返回錯誤,或生成無法預料的結(jié)果。 調(diào)用mysql_stmt_execute()執(zhí)行語句。 如果語句生成了結(jié)果集,捆綁數(shù)據(jù)緩沖,通過調(diào)用mysql_stmt_bind_result(),檢索行值。 通過重復調(diào)用mysql_stmt_fetch(),按行將數(shù)據(jù)提取到緩沖區(qū),直至未發(fā)現(xiàn)更多行為止。 通過更改參數(shù)值并再次執(zhí)行語句,重復步驟3到步驟6。

具體看代碼

#include?<stdio.h>  #include?<stdlib.h>  #include?<string.h>  #include?<dlfcn.h>  #include?<mysql>  #include?<stdio.h>  #include?<stdlib.h>  #include?<unistd.h>  #include?<string.h>  #include?<errno.h>  #include?<termios.h>  #include?<mysql>  #include?<termios.h>  #define?STRING_SIZE?50  #define?DROP_SAMPLE_TABLE?"DROP?TABLE?IF?EXISTS?test_table"  #define?CREATE_SAMPLE_TABLE?"CREATE?TABLE?test_table(col1?INT,  ?????????????????????????????????????????????????col2?VARCHAR(40),  ?????????????????????????????????????????????????col3?SMALLINT,  ?????????????????????????????????????????????????col4?TIMESTAMP)"  #define?INSERT_SAMPLE?"INSERT?INTO?test_table(col1,col2,col3)?VALUES(?,?,?)"?  int?main(int?arg,?char?*args[])  {  ????int?????????????ret?=?0,?i=0;  ????MYSQL???????????*mysql;  ????MYSQL???????????*connect;  ????MYSQL_RES???????*result;  ????MYSQL_ROW???????row;  ????MYSQL_FIELD?????*fields;  ????unsigned?int????num_fields;  ????//if?(arg?<p>以上就是MySQL入門之預處理語句的使用的內(nèi)容,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)(www.php.cn)!</p></termios.h></mysql></termios.h></errno.h></string.h></unistd.h></stdlib.h></stdio.h></mysql></dlfcn.h></string.h></stdlib.h></stdio.h>
? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊7 分享