使用Prepare Statement的函数来访问数据库,我是按照以下几个步骤进行的。初学MySQL编程,有什么问题希望可以一起交流。
初始化 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)
初始化Prepare Statement
MYSQL_STMT *mysql_stmt_init(MYSQL *mysql)
Prepare
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);
执行SQL
int mysql_stmt_execute(MYSQL_STMT *stmt)
绑定结果输出
my_bool mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
绑定之后,执行SQL的结果会输出到被绑定的变量中。
保存结果集到MySQL客户端
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)
关闭Prepare Statement
my_bool mysql_stmt_close(MYSQL_STMT *)
关闭 MYSQL 对象
void mysql_close(MYSQL *mysql)