常用的API接口
在C中常用的mysql API接口
1、初始化mysql对象。
mysql_init(NULL);
2、mysql连接函数:第一个参数是无连接的mysql对象,第二个参数是mysql地址,后面是用户名、密码、库名。函数返回一个有连接的MySQL对象。
mysql_real_connect(m_mysql, maddr, "root", "123456", "db", 0, NULL, 0);
3、sql查询函数:有连接的mysql对象,SQL语句。
mysql_query(m_mysql, sql.c_str());
4、获取查询结果集:将查询结果放在MYSQL RES*
对象中。
MYSQL_RES* res = mysql_store_result(m_mysql);
5、从查询结果集中获取结果记录
MYSQL_ROW row = mysql_fetch_row(res);
6、从查询结果集中获取结果数量
mysql_num_rows(res);
7、判断获取最近一次查询结果集的列数,如果最后一个查询不是SELECT查询(无结果集),则此函数返回0。
mysql_field_count(m_mysql);
代码示例
根据用户ID获取其对应的组名
//先从参数列表中获取可连接的mysql地址
int db_c connect(void){
MYSQL* mysql = m_mysql; //先拷贝原地址 做副本
//寻找可用的连接 定义一个常量迭代器 遍历配置列表
for(std::vector<std::string>::const_iterator maddr = g_maddrs.begin() ;
maddr != g_maddrs.end() ; ++maddr){
//判断当前地址是否可用
if(m_mysql = mysql_real_connect(mysql , maddr->c_str(),
"root", "123456", "db", 0, NULL, 0)){
return OK; //#define OK 1 链接成功返回OK
}
}
//遍历结束后 无可用连接 打印错误日志
logger_error("connect database fail: %s",
mysql_error(m_mysql = mysql));
return ERROR; //#define ERROR 0
}
//根据用户ID获取其组名
int db_c::get(char const* userid, std::string& groupname){
//拼接sql语句
acl::string sql;
sql.format("SELECT group_name FROM t_router WHERE userid='%s';",
userid);
//执行查询语句
if(mysql_query(m_mysql, sql.c_str())){
//如果失败打印日志
logger_error("query database fail: %s, sql: %s",
mysql_error(m_mysql), sql.c_str());
return ERROR;
}
//获取查询结果集
MYSQL_RES* res = mysql_store_result(m_mysql);
//如果获取失败打印日志
if (!res) {
logger_error("result is null: %s, sql: %s",
mysql_error(m_mysql), sql.c_str());
return ERROR;
}
//从查询结果集中 获取查询记录
MYSQL_ROW row = mysql_fetch_row(res);
//如果失败打印日志
if (!row)
logger_warn("result is empty: %s, sql: %s",
mysql_error(m_mysql), sql.c_str());
else { //成功的话 获取结果
groupname = row[0];
}
return OK;
}