mysql 数据库接口
2015-03-09 10:57 sylar_liang 阅读(3114) 评论(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是个很好的习惯。