SQL预处理SQL_STMT_*的使用和含义
来源:互联网 发布:2016年淘宝会员数量 编辑:程序博客网 时间:2024/06/18 09:36
typedef struct st_mysql_bind{ unsigned long*length; /* output length pointer */ my_bool *is_null; /* Pointer to null indicator */ void*buffer; /* buffer to get/put data */ /* set this if you want to track data truncations happened during fetch */ my_bool *error; unsigned char *row_ptr; /* for the current data position */ void (*store_param_func)(NET *net, struct st_mysql_bind *param); void (*fetch_result)(struct st_mysql_bind *, MYSQL_FIELD *, unsigned char **row); void (*skip_result)(struct st_mysql_bind *, MYSQL_FIELD *, unsigned char **row); /* output buffer length, must be set when fetching str/binary */ unsigned long buffer_length; unsigned long offset; /* offset position for char/binary fetch */ unsigned long length_value; /* Used if length is 0 */ unsigned intparam_number; /* For null count and error messages */ unsigned int pack_length; /* Internal length for packed data */ enum enum_field_types buffer_type;/* buffer type */ my_bool error_value; /* used if error is 0 */ my_bool is_unsigned; /* set if integer type is unsigned */ my_boollong_data_used; /* If used with mysql_send_long_data */ my_boolis_null_value; /* Used if is_null is 0 */ void *extension;} MYSQL_BIND;
此结构体可以用来作为软解析传入值,也可以用来作为传出结果的载体
在此结构体存储的都是函数指针和char类型的C语言里最小基础类型作为bool类型(节省内存,方便内存对齐)
在未来C语言的发展中,C语言是可以用面相对象的思想来解决问题的,而且依靠C语言强大的直接操作内存的特性
和面向对象的设计的高效性,能更好更深入的解决问题。代价就是处理相同的问题相对于其他语言而言需要消耗大量的时间而且容易出现错误
在C语言面向对象思想中 成员变量可以看作是基本存储数据类型
成员函数指针可以看作是类的成员函数
函数调用就是将数据放入到函数模板中处理
在C++java中,函数是不占用内存的。是用来处理数据的一个模板。
和这些函数的成员变量处于不同的存储区
在学习的过程中多看开源操作系统或者开源软件的源码,能够提高自己的编码能力和设计解决问题的能力
C语言连接MYSQL数据库预处理的代码
判断用户是否存在的一个简单的小例子;水平不高,仅做参考
bool userExist(const char *username,MYSQL* my_connection){ char *sql = "select * from stu where name=?;"; MYSQL_STMT * preparestatment = mysql_stmt_init(my_connection); int prepare_result = mysql_stmt_prepare(preparestatment, sql, strlen(sql)); if( 0 == prepare_result ){ printf("user = %s %d\n",username,strlen(username)); MYSQL_BIND params[2]; int id=2; char name[21]; strncpy(name,username,20); memset(params, 0, sizeof(params)); params[1].buffer_type = MYSQL_TYPE_LONG; params[1].buffer = &id; params[0].buffer_type = MYSQL_TYPE_STRING; params[0].buffer = name; params[0].buffer_length = strlen(name); params[0].is_null=0; mysql_stmt_bind_param(preparestatment, params); mysql_stmt_execute(preparestatment); mysql_stmt_close(preparestatment); /*mysql_stmt_store_result(preparestatment); while(mysql_stmt_fetch(preparestatment) == 0) //返回结果集中的下一行 printf("%d\t%s\n", num, nam); */ return true; }else { printf("prepare error:%s",strerror(errno)); return false; }}
#include<stdio.h>#include<stdlib.h>#include<string.h>#define DATASIZE 20typedef struct Node{ int data; struct Node * next;} Node,*PNode;int com(const void * a,const void * b){ return (*((PNode*)a))->data > (*((PNode*)b))->data ? 1 : 0;}int quicksort(void * array,int length,int elem_size,int (*compare)(const void *,const void*)){ void * temp = (void*)malloc(elem_size*2); realquicksort(temp,array,0,length-1,elem_size,compare); free(temp);}int realquicksort(void*t, void*array,int l,int r,int len,int (*compare)(const void *,const void*)){ if(l<r) { int i,j,rand_pos; i = l; j = l+1; void *a=t+len; srand(time(NULL)); rand_pos = rand()%(r-l+1)+l; memcpy(t,array+rand_pos*len,len); memcpy(array+rand_pos*len,array+l*len,len); memcpy(array+l*len,t,len); memcpy(a,array+l*len,len); while(j<=r) { if(compare(a,array+j*len)) { i++; memcpy(t,array+i*len,len); memcpy(array+i*len,array+j*len,len); memcpy(array+j*len,t,len); } j++; } memcpy(array+l*len,array+i*len,len); memcpy(array+i*len,a,len); PNode* temp=(PNode*)array; realquicksort(t,array,l,i-1,len,compare); realquicksort(t,array,i+1,r,len,compare); }}int main(){ PNode head = (PNode)malloc(sizeof(Node)),pre=NULL,temp; int i,j; // 生成随机数 srand(time(NULL)); head->data=rand()%(DATASIZE*100); head->next=NULL; pre = head; for(i=1;i<DATASIZE;i++){ temp=(PNode)malloc(sizeof(Node)); temp->data=rand()%(DATASIZE*100); temp->next=NULL; pre->next=temp; pre = temp; } printf("这些都是随机生成的数,以单链表的形式存储\n"); temp=head; while(temp){ printf("%d ",temp->data,temp); temp=temp->next; } printf("\n"); PNode pnodes[DATASIZE]; int pnodesLen=0; temp=head; while(temp){ pnodes[pnodesLen++]=temp; temp=temp->next; } quicksort(pnodes,pnodesLen,sizeof(PNode),com); printf("after order\n"); for(i=0;i<pnodesLen;i++){ printf("%d ",pnodes[i]->data); }}
阅读全文
0 0
- SQL预处理SQL_STMT_*的使用和含义
- #define和预处理指令的使用
- #define和预处理指令的使用。
- 数据预处理和weka.filters的使用
- sql中limit和count的含义
- C#使用预处理SQL语句访问MySQL的方法(Parameter)
- C#使用预处理SQL语句访问MySQL的方法(Parameter)
- 较全面的php mysql封装,使用mysqli对象支持预处理和事务,可输出执行后的sql
- scapy-yield的含义和使用
- LayoutInflater的使用和参数含义
- SQL关键字 except和except all的含义和区别
- C语言预处理、结构体和make的使用--C语言预处理命令
- SQL SET NOCOUNT ON的含义和作用
- SQL SET NOCOUNT ON的含义和作用
- thinkphp where条件预处理过滤的占位符含义
- ThinkPHP where查询条件预处理过滤的占位符含义
- ../和./和~/的含义
- #pragma预处理命令的使用
- Intellij idea控制台中文乱码问题
- 第29篇 杂文-写给自己
- 第30篇 移动端响应式布局页面实现
- 第32篇 里约奥运会
- 第33篇 js 常用简单的写法
- SQL预处理SQL_STMT_*的使用和含义
- 第34篇 再谈http协议
- 第35篇 IIS执行原理
- 第36篇 Asp.Net源码解析(一)
- Java实现给定任意年份和月份,输出该月有多少天
- 挑战程序竞赛系列(63):4.7字符串上的动态规划(1)
- CSDN-markdown编辑器使用手册
- Gradle依赖项学习总结,dependencies、transitive、force、exclude的使用与依赖冲突解决
- MySQL简介