代码改变世界

mysql 数据库接口

2015-03-09 10:57  sylar_liang  阅读(3102)  评论(0编辑  收藏  举报

一般步骤是:

1.调用mysql_init()初始化MYSQL结构,许多的函数执行需要这个结构体。

2.调用mysql_real_connect()连接数据库,参数中涉及到数据库名,数据库登录名,数据库密码等等。

3.调用mysql_real_query()执行一条Select SQL语句,通过mysql_store_result()的返回值获得Select的结果,返回的结果就是一个MYSQL_RES结构的指针。

4.调用mysql_fetch_row()获得一条记录,函数的返回值是MYSQL_ROW对象,这是一个char二维数组。获取一条记录以后,mysql_fetch_row会将游标自动向下移动一条记录。

5.调用mysql_free_result()释放结果资源,调用mysql_close关闭连接。

 

1.mysql_sqlstate
const char *mysql_sqlstate(MYSQL *mysql)

描述
返回由Null终结的字符串,该字符串包含关于上次错误的SQLSTATE错误代码。错误代码包含5个字符。'00000'表示无错误。其值由ANSI SQL和ODBC指定。

注意:并非所有的MySQL错误均会被映射到SQLSTATE错误代码。值'HY000'(一般错误)用于未映射的错误。

返回值
包含SQLSTATE错误码的、由Null终结的字符串。

 

2..mysql_real_connect 连接远程数据库

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, // 如果unix_socket不是NULL,该字符串描述了应使用的套接字或命名管道。注意,“host”参数决定了连接的类型。
  unsigned long client_flag // client_flag的值通常为0,但是,也能将其设置为下述标志的组合,以允许特定功能

);

标志名称

标志描述

CLIENT_COMPRESS

使用压缩协议。

CLIENT_FOUND_ROWS

返回发现的行数(匹配的),而不是受影响的行数。

CLIENT_IGNORE_SPACE

允许在函数名后使用空格。使所有的函数名成为保留字。

CLIENT_INTERACTIVE

关闭连接之前,允许interactive_timeout(取代了wait_timeout)秒的不活动时间。客户端的会话wait_timeout变量被设为会话interactive_timeout变量的值。

CLIENT_LOCAL_FILES

允许LOAD DATA LOCAL处理功能。

CLIENT_MULTI_STATEMENTS

通知服务器,客户端可能在单个字符串内发送多条语句(由‘;’隔开)。如果未设置该标志,将禁止多语句执行。

CLIENT_MULTI_RESULTS

通知服务器,客户端能够处理来自多语句执行或存储程序的多个结果集。如果设置了CLIENT_MULTI_STATEMENTS,将自动设置它。

CLIENT_NO_SCHEMA

禁止db_name.tbl_name.col_name语法。它用于ODBC。如果使用了该语法,它会使分析程序生成错误,在捕获某些ODBC程序中的缺陷时,它很有用。

CLIENT_ODBC

客户端是ODBC客户端。它将mysqld变得更为ODBC友好。

CLIENT_SSL

使用SSL(加密协议)。该选项不应由应用程序设置,它是在客户端库内部设置的。

如:

if ( ! mysql_real_connect
(
m_pMySql,
m_pszIPAddress, // localhost
m_pszUserName,  // root
m_pszUserPassword, // 1234
m_pszDatabaseName,  // mytestdb
0,
NULL,
CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS/*CLIENT_LOCAL_FILES*/)
)

 

3.mysql_set_character_set 为当前连接设置默认的字符集

该函数用于为当前连接设置默认的字符集。字符串csname指定了1个有效的字符集名称。连接校对成为字符集的默认校对。该函数的工作方式与SET NAMES语句类似,但它还能设置mysql->charset的值,从而影响了由mysql_real_escape_string()设置的字符集。该函数是在MySQL 5.0.7中增加的。

返回:

该函数0表示成功,非0值表示出现错误。

如: mysql_set_character_set( m_pMySql, "utf8");

 

4.mysql_ping 

int mysql_ping(MYSQL *mysql)

Ping 一个服务器连接,如果没有连接则重新连接。
如果存在连接,则返回 true。如果失败,则返回 false。

 

5.mysql_query 发送一条 MySQL 查询

int mysql_query(MYSQL *mysql, const char *sqlcmd)

如果没有打开的连接,本函数会尝试无参数调用 mysql_connect() 函数来建立一个连接并使用之。

返回值:

成功返回TRUE,失败返回FALSE。 // random中 if(mysql_query(... , ...) ){出错处理;} // 是否搞反了???

 

6.mysql_store_result 

MYSQL_RES *mysql_store_result(MYSQL *mysql)

在使用 mysql_query() 进行一次查询后,一般要用这两个函数之一来把结果存到一个 MYSQL_RES * 变量中。 

 

mysql_use_result 与 mysql_store_result 的区别:

mysql_use_result() 的结果必须“一次性用完”,也就是说用它得到一个 result 后,必须反复用 mysql_fetch_row() 读取其结果直至该函数返回 null 为止,否则如果你再次进行 mysql 查询,会得到 “Commands out of sync; you can't run this command now” 的错误。

mysql_store_result() 得到 result 是存下来的,你无需把全部行结果读完,就可以进行另外的查询。比如你进行一个查询,得到一系列记录,再根据这些结果,用一个循环再进行数据库查询,就只能用 mysql_store_result() 。 

返回值
具有多个结果的MYSQL_RES结果集合。如果出现错误,返回NULL。

如:

MYSQL_RES *_Result;
MYSQL_ROW _Row;

_Result = mysql_store_result(m_pMySql);
_iFields = mysql_num_fields(_Result);

while ( ( _Row = mysql_fetch_row( _Result ) ) )
{

  ...

}

额外:关于mysql_store_result的使用: http://my.oschina.net/moooofly/blog/186456

 

7.mysql_num_fields 获取结果中列的个数

如果失败,则返回 false。

_iFields = mysql_num_fields(_Result); // MYSQL_RES *_Result; int _iFields;

 

8.mysql_fetch_row

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

获得一条记录,函数的返回值是MYSQL_ROW对象,这是一个char二维数组。获取一条记录以后,mysql_fetch_row会将游标自动向下移动一条记录。

当在mysql_store_result()之后使用时,如果没有更多的行可检索时,mysql_fetch_row()返回NULL。

 

9.mysql_free_result

释放结果内存

如果成功,则返回 true,如果失败,则返回 false。

 

10.mysql_error

函数返回上一个 MySQL 操作产生的文本错误信息。

本函数返回上一个 MySQL 函数的错误文本,如果没有出错则返回 ''(空字符串)。

 

11.mysql_close

当你从数据库获取了数据后,还要对这些数据进行复杂运算加工时(肯定很耗时间)
这时就应关闭数据库连接,以便其他人使用

或者 mysql_query查询完,就调用mysql_close是个很好的习惯。