enum enum_field_types {
MYSQL_TYPE_DECIMAL,
MYSQL_TYPE_TINY,
MYSQL_TYPE_SHORT,
MYSQL_TYPE_LONG,
MYSQL_TYPE_FLOAT,
MYSQL_TYPE_DOUBLE,
MYSQL_TYPE_NULL,
MYSQL_TYPE_TIMESTAMP,
MYSQL_TYPE_LONGLONG,
MYSQL_TYPE_INT24,
MYSQL_TYPE_DATE,
MYSQL_TYPE_TIME,
MYSQL_TYPE_DATETIME,
MYSQL_TYPE_YEAR,
MYSQL_TYPE_NEWDATE,
MYSQL_TYPE_VARCHAR,
MYSQL_TYPE_BIT,
MYSQL_TYPE_TIMESTAMP2,
MYSQL_TYPE_DATETIME2,
MYSQL_TYPE_TIME2,
MYSQL_TYPE_NEWDECIMAL=,
MYSQL_TYPE_ENUM=,
MYSQL_TYPE_SET=,
MYSQL_TYPE_TINY_BLOB=,
MYSQL_TYPE_MEDIUM_BLOB=,
MYSQL_TYPE_LONG_BLOB=,
MYSQL_TYPE_BLOB=,
MYSQL_TYPE_VAR_STRING=,
MYSQL_TYPE_STRING=,
MYSQL_TYPE_GEOMETRY=
} typedef struct st_mysql_field {
char *name; /* Name of column 列名 */
char *org_name; /* Original column name, if an alias */
char *table; /* Table of column if column was a field */
char *org_table; /* Org table name, if table was an alias */
char *db; /* Database for table */
char *catalog; /* Catalog for table */
char *def; /* Default value (set by mysql_list_fields) */
unsigned long length; /* Width of column (create length) */
unsigned long max_length; /* Max width for selected set */
unsigned int name_length;
unsigned int org_name_length;
unsigned int table_length;
unsigned int org_table_length;
unsigned int db_length;
unsigned int catalog_length;
unsigned int def_length;
unsigned int flags; /* Div flags */
unsigned int decimals; /* Number of decimals in field */
unsigned int charsetnr; /* Character set */
enum enum_field_types type; /* Type of field. See mysql_com.h for types */ // 字段的mysql 数据类型
void *extension;
} MYSQL_FIELD; int mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);
说明:执行SQL
参数1:已初始化的MYSQL 实例;
参数2:SQL 语句;
参数3:SQL 语句字符数。 MYSQL_RES *mysql_store_result(MYSQL *mysql);
说明:对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()或mysql_use_result()
参数:已初始化的MYSQL 实例。 // typedef char **MYSQL_ROW;
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
说明:检索一个结果集合的下一行。当在mysql_store_result()之后使用时,如果没有更多的行可检索时,mysql_fetch_row()返回NULL。当在mysql_use_result()之后使用时,当没有更多的行可检索时或如果出现一个错误,mysql_fetch_row()返回NULL。

代码范例:

 #include <iostream>
#include <mysql.h>
#include <string> #include <assert.h> int main()
{
// 1、初始化MYSQL 实例
MYSQL *ms_conn = mysql_init(NULL);
if (ms_conn == NULL)
{
std::cout << "Error: mysql_init failed." << std::endl;
return ;
}
std::cout << "Info: mysql init successful." << std::endl; // 2、连接MYSQL 服务器
MYSQL *ms_tmp_res = NULL;
ms_tmp_res = mysql_real_connect(ms_conn, "localhost", "root", "123456sx",
"suyh", , NULL, );
if (ms_tmp_res == NULL)
{
std::cout << "Error: connect mysql failed: " << mysql_error(ms_conn) << std::endl;
mysql_close(ms_conn), ms_conn = NULL;
return ;
}
std::cout << "Info: mysql connect successful." << std::endl; // 3、执行SQL 语句
std::string str_sqls = "";
str_sqls += "SELECT id, account, sex, level, powers FROM player_data WHERE id = 100000 OR id = 100001 OR id = 100002"; int res = ;
res = mysql_real_query(ms_conn, str_sqls.c_str(), str_sqls.size());
if (res != )
{
std::cout << "Error: query failed, sql: " << str_sqls.c_str() << std::endl;
std::cout << mysql_error(ms_conn) << std::endl;
}
else
{
std::cout << "Info: query successful." << std::endl; // 取出SQL 语句执行的结果集
MYSQL_RES *ms_res = mysql_store_result(ms_conn);
if (ms_res != NULL)
{
// 字段个数
unsigned int field_num = mysql_num_fields(ms_res); // 每个字段的数据信息
MYSQL_FIELD* field_info = mysql_fetch_field(ms_res);
assert(field_info != NULL); // 每一个字段的值存储在row_data[i] 中,基本都以字符串的形式存储。NULL 的结果 指针也是NULL。
// 二进制数据可以通过mysql_fetch_lengths() 函数得到该字段的二进制数据长度,同样以数组形式取出,即:lens[i];
MYSQL_ROW row_data = NULL; // mysql.h --- typedef char **MYSQL_ROW;
while ()
{
row_data = mysql_fetch_row(ms_res); // 取出下一行结果
if (row_data == NULL)
break; std::cout << "##############################################" << std::endl;
for (int i = ; i < field_num; ++i)
{
if (row_data[i] == NULL)
std::cout << "field name: '" << field_info[i].name << "', values is NULL." << std::endl;
else
std::cout << "field name: '" << field_info[i].name << "', values is " << row_data[i] << std::endl;
}
}
} // 释放结果集
mysql_free_result(ms_res), ms_res = NULL;
} // 使用完释放系统资源
mysql_close(ms_conn), ms_conn = NULL; return ;
}

MYSQL C API : mysql_real_query()的更多相关文章

  1. mysql C API 字符串玩转备份调优

  2. The MySQL C API 编程实例

    在网上找了一些MYSQL C API编程的文章,看了后认为还是写的不够充分,依据自己经验写了这篇<The MySQL C API 编程实例>,希望对须要调用到MYSQL的C的API的朋友有 ...

  3. MySQL C API概述

    以下列表总结了C API中可用的功能.有关更多详细信息,请参见 第27.8.7节“C API函数描述”中的说明. my_init():在线程安全程序中初始化全局变量和线程处理程序 mysql_affe ...

  4. MySql接口API函数综述

    C API函数概述 函数 描述 mysql_affected_rows() 返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. mysql_autocommit() 切换 a ...

  5. PHP数据库操作:从MySQL原生API到PDO

    本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对象.PDO操作MySQL数据库的. 为了后面的测试,先建立数据库表test.包含表名user,s ...

  6. c++使用mysql的api连接相关问题

    记录一下自己使用中的相关问题,方便有相同问题的同学解决. 关于在VS中的各种配置.看这里.只是须要注意一下,我如今用的mysql版本号是5.6的,已经没有[MySQL Server \lib\opt] ...

  7. MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL

    [转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...

  8. MySQL C API(23)

    C API 提供了对 MySQL c/s 模型的底层访问.C API 代码在 mysqlclient 库中实现.可以从该库中引用到的变量及含义: 环境变量 含义 MYSQL_UNIX_PORT 本地连 ...

  9. mysql C API的使用

    <MySQL++简介>介绍了如何使用C++来访问mysql,本文记录下使用C API访问mysql,mysql++就是对本文介绍的C-API的封装. 常用函数(名字就能告诉我们用法): M ...

随机推荐

  1. Linux ext2文件系统

    Linux最传统的磁盘文件系统(filesystem)使用的是ext2 1.ext2文件系统结构ext2文件系统划分为多个块组,每个块组拥有独立的inode/block,一个文件系统只有一个Super ...

  2. jquery-easyui中表格的行编辑功能

    datagrid现在具有行编辑能力了,使用时只须在columns中为需要编辑的列添加一个editor属性,编辑保存时同时具有数据校验能力. 看一个例子效果图: 代码如下: $('#tt').datag ...

  3. SVG ViewBox

    如果svg图形太大或者太小,就可以用ViewBox属性来调整在页面中的显示范围.大小. "像素不能直接换算成英寸.厘米,要在 dpi ( dot per inch 分辨率,概念较多,鼠标 d ...

  4. c# 调用MD5CryptoServiceProvider出现 System.InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.

    进注册表按Win+R运行regedit修改下面的值为0就可以了 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorith ...

  5. replace() replace_copy()

    int a[] = {1,2,3,3,4}; vector<int> v(a, a+5); vector<int> v2; //replace(v.begin(), v.end ...

  6. Redis 高可用性解决方案(Sentinel)

    Sentinel是Redis的高可用性解决方案: 由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主 ...

  7. redis配置文件解析

    Redis是一个简单高效的内存KV数据库,基本上下载源码make install,编译完成,然后进入src目录运行redis-server即可运行.就是因为这么简单往往有朋友直接运行,将没有密码的re ...

  8. [你必须知道的.NET]第一回:恩怨情仇:is和as

    本文将介绍以下内 容: • 类型转换 • is/as操作符小议 1. 引言 类型安全是.NET设计之初重点考虑 的内容之一,对于程序设计者来说,完全把握系统数据的类型安全,经常是力不从心的问题.现在, ...

  9. ORACLE 重置SEQQUENCE

    select seq.nextval from dual; --假设值是30 alter sequence seq increment by -30; select seq.nextval from ...

  10. Hibernate 抓取策略fetch-1 (select join subselect)

    原文 :http://4045060.blog.51cto.com/4035060/1088025 部分参考:http://www.cnblogs.com/rongxh7/archive/2010/0 ...