蛤蟆笔记MySQL学习C编写MySQL程序九预处理.docx
- 文档编号:1785828
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:14
- 大小:19.04KB
蛤蟆笔记MySQL学习C编写MySQL程序九预处理.docx
《蛤蟆笔记MySQL学习C编写MySQL程序九预处理.docx》由会员分享,可在线阅读,更多相关《蛤蟆笔记MySQL学习C编写MySQL程序九预处理.docx(14页珍藏版)》请在冰豆网上搜索。
蛤蟆笔记MySQL学习C编写MySQL程序九预处理
76.蛤蟆笔记MySQL学习——C编写MySQL程序九预处理
之前都是以字符串的形式发送和检索所有信息。
也可以使用二进制的客户端/服务器协议。
二进制协议支持服务器端预处理语句,并且可以按本地格式来传输数据值。
并非所有的语句都能被预处理,使用如下几种语句:
createtable,delete,do,insert,replace,select,set,update和绝大多数show变体。
预处理基本流程如下:
●Mysql_stmt_init分配一个语句处理器,返回一个指向处理器的指针
●调用mysql_stms_prepare把语句发送到服务器,接受预处理,与语句处理器相关联
●如果包含占位符,在执行之前,为每个占位符提供相应的数据
●调用mysql_stmt_execute函数,执行该语句
●如果只修改不生产结果集,调用mysql_stmt_affected_rows来确定影响的行数
●如果有结果集,调用mysql_stmt_result_metadata来获得关于该结果集的元数据。
调用mysql_stmt_bind_result把这些结构绑定到语句处理器上,然后反复调用mysql_stmt_fetch,依次取回每一行。
●使用完语句处理之后,调用ysql_stmt_close来释放它。
示例代码
●Prepared.c
#include
#include
#include
#include
#include
#ifdefHAVE_OPENSSL
enumoptions_client
{
OPT_SSL_SSL=256,
OPT_SSL_KEY,
OPT_SSL_CERT,
OPT_SSL_CA,
OPT_SSL_CAPATH,
OPT_SSL_CIPHER,
OPT_SSL_VERIFY_SERVER_CERT
};
#endif
staticchar*opt_host_name=NULL;/*serverhost(default=localhost)*/
staticchar*opt_user_name=NULL;/*username(default=loginname)*/
staticchar*opt_password=NULL;/*password(default=none)*/
staticunsignedintopt_port_num=0;/*portnumber(usebuilt-invalue)*/
staticchar*opt_socket_name=NULL;/*socketname(usebuilt-invalue)*/
staticchar*opt_db_name=NULL;/*databasename(default=none)*/
staticunsignedintopt_flags=0;/*connectionflags(none)*/
#include
staticintask_password=0;/*whethertosolicitpassword*/
staticMYSQL*conn;/*pointertoconnectionhandler*/
staticconstchar*client_groups[]={"client",NULL};
staticstructmy_optionmy_opts[]=/*optioninformationstructures*/
{
{"help",'?
',"Displaythishelpandexit",
NULL,NULL,NULL,
GET_NO_ARG,NO_ARG,0,0,0,0,0,0},
{"host",'h',"Hosttoconnectto",
(uchar**)&opt_host_name,NULL,NULL,
GET_STR,REQUIRED_ARG,0,0,0,0,0,0},
{"password",'p',"Password",
(uchar**)&opt_password,NULL,NULL,
GET_STR,OPT_ARG,0,0,0,0,0,0},
{"port",'P',"Portnumber",
(uchar**)&opt_port_num,NULL,NULL,
GET_UINT,REQUIRED_ARG,0,0,0,0,0,0},
{"socket",'S',"Socketpath",
(uchar**)&opt_socket_name,NULL,NULL,
GET_STR,REQUIRED_ARG,0,0,0,0,0,0},
{"user",'u',"Username",
(uchar**)&opt_user_name,NULL,NULL,
GET_STR,REQUIRED_ARG,0,0,0,0,0,0},
#include
{NULL,0,NULL,NULL,NULL,NULL,GET_NO_ARG,NO_ARG,0,0,0,0,0,0}
};
/*
*Printdiagnosticmessage.Ifconnisnon-NULL,printerrorinformation
*returnedbyserver.
*/
staticvoid
print_error(MYSQL*conn,char*message)
{
fprintf(stderr,"%s\n",message);
if(conn!
=NULL)
{
fprintf(stderr,"Error%u(%s):
%s\n",
mysql_errno(conn),mysql_sqlstate(conn),mysql_error(conn));
}
}
/*
*Likeprint_error(),butusestatementhandlerratherthan
*connectionhandlertoaccesserrorinformation.
*/
/*#@_PRINT_STMT_ERROR_*/
staticvoid
print_stmt_error(MYSQL_STMT*stmt,char*message)
{
fprintf(stderr,"%s\n",message);
if(stmt!
=NULL)
{
fprintf(stderr,"Error%u(%s):
%s\n",
mysql_stmt_errno(stmt),
mysql_stmt_sqlstate(stmt),
mysql_stmt_error(stmt));
}
}
/*#@_PRINT_STMT_ERROR_*/
staticmy_bool
get_one_option(intoptid,conststructmy_option*opt,char*argument)
{
switch(optid)
{
case'?
':
my_print_help(my_opts);/*printhelpmessage*/
exit(0);
case'p':
/*password*/
if(!
argument)/*novaluegiven;solicititlater*/
ask_password=1;
else/*copypassword,overwriteoriginal*/
{
opt_password=strdup(argument);
if(opt_password==NULL)
{
print_error(NULL,"couldnotallocatepasswordbuffer");
exit
(1);
}
while(*argument)
*argument++='x';
ask_password=0;
}
break;
#include
}
return(0);
}
#include"process_prepared_statement.c"
int
main(intargc,char*argv[])
{
intopt_err;
MY_INIT(argv[0]);
load_defaults("my",client_groups,&argc,&argv);
if((opt_err=handle_options(&argc,&argv,my_opts,get_one_option)))
exit(opt_err);
/*solicitpasswordifnecessary*/
if(ask_password)
opt_password=get_tty_password(NULL);
/*getdatabasenameifpresentoncommandline*/
if(argc>0)
{
opt_db_name=argv[0];
--argc;++argv;
}
/*initializeclientlibrary*/
if(mysql_library_init(0,NULL,NULL))
{
print_error(NULL,"mysql_library_init()failed");
exit
(1);
}
/*initializeconnectionhandler*/
conn=mysql_init(NULL);
if(conn==NULL)
{
print_error(NULL,"mysql_init()failed(probablyoutofmemory)");
exit
(1);
}
#ifdefHAVE_OPENSSL
/*passSSLinformationtoclientlibrary*/
if(opt_use_ssl)
mysql_ssl_set(conn,opt_ssl_key,opt_ssl_cert,opt_ssl_ca,
opt_ssl_capath,opt_ssl_cipher);
mysql_options(conn,MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
(char*)&opt_ssl_verify_server_cert
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蛤蟆 笔记 MySQL 学习 编写 程序 预处理