Mysql数据库函数

Mysql数据库函数
  1.MYSQL *mysql_init(MYSQL *mysql) 分配或初始化与mysql_real_connect()相适应的MYSQL对象.
    如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。
    如果mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时。将释放该对象。
    初始化的MYSQL*句柄。如果无足够内存以分配新的对象,返回NULL。
    在内存不足的情况下,返回NULL。
      例:MYSQL mysql; mysql_init(&mysql); 或 MYSQL *mysql = mysql_init(NULL);
        一般定义 MYSQL *mysql,避免取地址操作出错。
      注:涉及数据库操作时编译加-L/usr/lib64/mysql -lmysqlclient_r 也可以是-lmysqlclient
 
  2.MYSQL *mysql_connect(MYSQL *mysql,const char *host,const char *user,const char *passwd) 现已不用
    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 *为mysql_init函数返回的指针
      host主机地址,user/passwd/db用户名和密码.数据库,port 数据库端口
      unix_socket使用unix连接方式 unix_socket一般为NULL,表明不使用socket或管道机制
      client_flag参数经常设置为0
        注:host为null或localhost时链接的是本地的计算机
        当mysql默认安装在系统中,root账户是没有密码的,因此用户名使用root,密码为NULL.
        当db为空的时候,函数链接到默认数据库,在进行mysql安装时会存在默认的test数据库,因此此处可以使用test数据库名称,port端口为0
      返回:当连接成功时,返回MYSQL连接句柄,失败,返回NULL。
        当成功时,返回值与第一个参数值是相同的。
      例:MYSQL mysql; mysql_real_connect(&mysql,"192.168.1.6","root","","Cacti_Data",atoi("3306"),NULL,0)
          MYSQL *mysql; mysql_real_connect(mysql,"localhost","root",NULL,"test",0,NULL,0);
      详见:http://www.wang48.com/jishubaodianview/?jsd_id=13553
          
  2.int mysql_options(MYSQL *mysql, enum mysql_option option, const char *arg)
      可用于设置额外的连接选项,并影响连接的行为。可多次调用该函数来设置数个选项。
      应在mysql_init()之后、以及mysql_connect()或mysql_real_connect()之前调用mysql_options()。
      选项参量指的是你打算设置的选项。arg参量是选项的值。如果选项是整数,那么arg应指向整数的值。
      详见:http://www.wang48.com/jishubaodianview/?jsd_id=13550
 
  3.int mysql_query(MYSQL *mysql, const char *query)
    int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)
      执行由“query”指向的SQL查询,它应是字符串长度字节“long”。
      正常情况下,字符串必须包含1条SQL语句,而且不应为语句添加终结分号";"或“\\g”。
      如果允许多语句执行,字符串可包含由分号隔开的多条语句。
      如果希望知道查询是否应返回结果集,可使用mysql_field_count()进行检查.
      如果查询成功,返回0。如果出现错误,返回非0值。
      错误代码:
        CR_COMMANDS_OUT_OF_SYNC 以不恰当的顺序执行了命令。
        CR_SERVER_GONE_ERROR MySQL服务器不可用。
        CR_SERVER_LOST 在查询过程中,与服务器的连接丢失。
        CR_UNKNOWN_ERROR 出现未知错误。
      注:对于包含二进制数据的查询,必须使用mysql_real_query(),因为二进制数据可能会包含‘\\0’字符。
        此外,mysql_real_query()比mysql_query()快,因为它不会在查询字符串上调用strlen()。
      例:string tmp = "set names \'gbk\'"; mysql_real_query(mysql,tmp.c_str(),tmp.length());
          string sln("tom"); string sql = "select ID,PID,VID from Table1 where Name = \'" + sln + "\'";
          mysql_query(mysql, sql.c_str());
          
  4.MYSQL_RES *mysql_store_result(MYSQL *mysql)返回查询结果集,0没有结果集,非0具有多个结果的MYSQL_RES结果集合。如果出现错误,返回NULL。
    MYSQL_RES *mysql_use_result(MYSQL *mysql)启动查询返回MYSQL_RES结构
    int mysql_num_rows (MYSQL_RES *res) 返回结果集的行数
    unsigned int mysql_field_count(MYSQL *mysql) 返回结果集中行的列数
    unsigned int mysql_num_fields(MYSQL_RES *res) 同上。
    MYSQL_ROW mysql_fetch_row(MYSQL_RES *res) 从结果集中取得下一行,返回下一行的MYSQL_ROW结构。如果没有更多的行可检索或如果出现一个错误,NULL。
    unsigned long *mysql_fetch_lengths(MYSQL_RES *res) 返回在结果集合内的当前行的列长度
    MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *res) 返回行光标当前的偏移量.
    MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *res, MYSQL_ROW_OFFSET offset) 设置行光标.返回行光标先前的值
    void mysql_free_result(MYSQL_RES *res)释放为一个结果集合分配的内存
      可以调用mysql_fetch_row()来获取结果集中的行,或调用mysql_row_seek()和mysql_row_tell()来获取或设置结果集中的当前行位置。
      一旦完成了对结果集的操作,必须调用mysql_free_result()来释放内存。
      如果成功,mysql_store_result()将复位mysql_error()和mysql_errno()。
        注:mysql_store_result() 立即从服务器上检索结果集,并为之分配内存,存储到客户机中
            而mysql_use_result()只是启动查询,通过mysql_fetch_row()来调用
              mysql_fetch_row()调用即取得一行数据,每个结果的列储存在一个数组的单元中,偏移量从0开始,依次调用取得下一行。
        例: MYSQL_RES *res = mysql_store_result(&mysql); MYSQL_ROW *row = mysql_fetch_row(res); mysql_free_result(res);
             unsigned long *lengths; lengths = mysql_fetch_lengths(res);


  5.void mysql_close(MYSQL *mysql) 关闭一个以前打开了的连接,释放被mysql指向的连接句柄.
    string mysql_error(MYSQL *mysql); 返回最近一次MySQL函数的执行状态
    unsigned int mysql_errno(MYSQL *mysql)返回最近调用的API函数的错误代码
    例:string err_str = mysql_error(mysql); 常用于数据库断开重连,下例执行SQl语句过程中出错重连。
       if(err_str == "Lost connection to MySQL server during query" || err_str == "Malformed packet")
           {mysql_close(mysql); mysql = NULL; return Reconnect(...);}
原文地址:https://www.cnblogs.com/robbychan/p/3786956.html