1、MySQL 5.1支持在单个查询字符串中指定的多语句的执行。
要想与给定的连接一起使用该功能,打开连接时,必须将标志参数中的CLIENT_MULTI_STATEMENTS选项指定给mysql_real_connect()。
也可以通过调用mysql_set_server_option(MYSQL_OPTION_MULTI_STATEMENTS_ON),为已有的连接设置它。
在默认情况下,mysql_query()和mysql_real_query()仅返回第1个查询的状态,并能使用mysql_more_results()和mysql_next_result()对后续查询的状态进行处理。
多语句功能可与mysql_query()或mysql_real_query()一起使用。
它不能与预处理语句接口一起使用。
按照定义,预处理语句仅能与包含单个语句的字符串一起使用。
2、多sql语句执行测试用表结构(我们使用前面三个字段进行测试):
测试代码:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
using namespace chrono;
int main()
{
//1.初始化环境
MYSQL* mySql = mysql_init(NULL);
if (mySql == NULL)
{
printf("数据库环境初始化失败!\n");
return -1;
}
//Connect to server with option CLIENT_MULTI_STATEMENTS
mySql = mysql_real_connect(mySql, "localhost", "root", "root", "zzc", 3306, NULL, CLIENT_MULTI_STATEMENTS);
if (mySql == NULL)
{
printf("数据库连接失败!\n");
return -1;
}
mysql_set_character_set(mySql, "gbk");
int status = mysql_query(mySql, "truncate table student;\
insert student(id, name, time) values(1001, '张三', '2022-04-15 11:05:33');\
insert student(id, name, time) values(1002, 'lisi', '2022-04-15 11:06:22');\
select id, name, time from student;\
select id, name from student where id = 1001");
do
{
MYSQL_RES * result = NULL;
result = mysql_store_result(mySql);
if (result)
{
//循环获取结果集每一行数据数据
MYSQL_ROW m_row = nullptr;
//获取结果集字段总数
int fieldCount = mysql_num_fields(result);
//获取结果集一行数据的字段信息
MYSQL_FIELD *fields = mysql_fetch_fields(result);
printf("本次结果集中共 %lld 行数据:\n", mysql_num_rows(result));
while (m_row = mysql_fetch_row(result))
{
for (int i = 0; i < fieldCount; ++i)
{
if (!strcmp(fields[i].name, "name"))
{
char* val = m_row[i];
unsigned long length = mysql_fetch_lengths(result)[i];
if (val)
{
cout << string(val, length) << "\t";
}
}
else if (!strcmp(fields[i].name, "time"))
{
char* val = m_row[i];
unsigned long length = mysql_fetch_lengths(result)[i];
if (val)
{
cout << string(val, length) << "\t";
}
}
else if (!strcmp(fields[i].name, "id"))
{
int val = atoi(m_row[i]);
cout << val << "\t";
}
}
cout << endl;
}
mysql_free_result(result);
}
else
{
//调用mysql_field_count()来判定mysql_store_result()是否应生成非空结果集
if (0 == mysql_field_count(mySql))
{
printf("%lld 行被影响\n", mysql_affected_rows(mySql));
}
else
{
printf("发生错误:%s\n", mysql_error(mySql));
}
}
} while (!mysql_next_result(mySql));
//释放资源-数据库
if (mySql)
{
mysql_close(mySql);
}
return 0;
}
测试输出结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)