使用Prepare Statement的函数来访问数据库,我是按照以下几个步骤进行的。初学MySQL编程,有什么问题希望可以一起交流。
MYSQL *mysql_init(MYSQL *mysql)
初始化的时候参数一般设置为NULL
。
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_STMT *mysql_stmt_init(MYSQL *mysql)
int mysql_stmt_prepare(MYSQL_STMT *stmt, const char *stmt_str, unsigned long length)
length
是stmt_str
的长度。
返回0表示成功。
(注:这里的SQL语句末尾不可以加上“;”,即stmt_str
)
my_bool mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)
若stmt_str
中要传入参数,就需要通过该函数来实现。比如:
char stmt_str[] = "SELECT * FROM Person WHERE id=? AND name=?";
mysql_stmt_prepare(stmt, stmt_str, (unsigned long)strlen(stmt_str));
MYSQL_BIND params[2];
int id = 1;
char name[] = "Tom";
memset(params, 0, sizeof(params));
params[0].buffer_type = MYSQL_TYPE_LONG;
params[0].buffer = (char *)&id;
params[1].buffer_type = MYSQL_TYPE_STRING;
params[1].buffer = (char *)name;
// 绑定
mysql_stmt_bind_param(stmt, params);
int mysql_stmt_execute(MYSQL_STMT *stmt)
my_bool mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
绑定之后,执行SQL的结果会输出到被绑定的变量中。
int mysql_stmt_store_result(MYSQL_STMT *stmt)
SQL语句执行后,结果仍然缓存在Server端,使用mysql_stmt_fetch()
只能每次从Server端拉去一条数据,所以可以缓存到Client,然后再获取数据。
int mysql_stmt_fetch(MYSQL_STMT *stmt)
每次获取一条数据到my_bool mysql_stmt_bind_result()
函数绑定的变量中。有多条数据可以使用循环获取。
my_bool mysql_stmt_free_result(MYSQL_STMT *stmt)
my_bool mysql_stmt_close(MYSQL_STMT *)
void mysql_close(MYSQL *mysql)