MySQL入门之一次函数调用执行多条语句

来源:互联网 发布:国家卫生统计网络直报 编辑:程序博客网 时间:2024/05/29 14:49

 支持在单个字符串中指定的多语句的执行。要想与给定的连接一起使用该功能,打开连接时,必须将标志参数中的CLIENT_MULTI_STATEMENTS选项指定给mysql_real_connect()。也可以通过调用mysql_set_server_option(MYSQL_OPTION_MULTI_STATEMENTS_ON),为已有的连接设置它。

常用套路:

/* Connect to server with option CLIENT_MULTI_STATEMENTS */mysql_real_connect(..., CLIENT_MULTI_STATEMENTS);/* Now execute multiple queries */mysql_query(mysql,"DROP TABLE IF EXISTS test_table;\                   CREATE TABLE test_table(id INT);\                   INSERT INTO test_table VALUES(10);\                   UPDATE test_table SET id=20 WHERE id=10;\                   SELECT * FROM test_table;\                   DROP TABLE test_table");do{  /* Process all results */  ...  printf("total affected rows: %lld", mysql_affected_rows(mysql));  ...  if (!(result= mysql_store_result(mysql)))  {     printf(stderr, "Got fatal error processing query\n");     exit(1);  }  process_result_set(result); /* client function */  mysql_free_result(result);} while (!mysql_next_result(mysql));

具体看代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <dlfcn.h>#include <mysql/mysql.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <errno.h>#include <termios.h>#include <mysql/mysql.h>void process_result_set(MYSQL       *mysql, MYSQL_RES *result){        int i =0;        unsigned int fieldnum;        //从结果集,获取表头信息        MYSQL_FIELD *fields = mysql_fetch_fields(result);        fieldnum = mysql_field_count(mysql);        for (i=0; i<fieldnum; i++)        {            printf("%s\t", fields[i].name);        }        printf("\n");        //从结果集, 按照行获取信息信息        MYSQL_ROW row = NULL;        //从结果集中一行一行的获取数据        while (  row = mysql_fetch_row(result))        {            fieldnum = mysql_field_count(mysql);             //优化,我的行有多少列。。。。查找这样的api函数            for (i=0; i<fieldnum; i++) //经过测试 发现 不是以0结尾的指针数组。。            {                printf("%s\t", row[i]);            }            printf("\n");        }}int main(){    int         ret = 0, status = 0;    MYSQL       *mysql;    MYSQL_RES   *result;    MYSQL_ROW   row;    char        *query;    mysql = mysql_init(NULL);    mysql =mysql_real_connect(mysql, "localhost", "root", "123456", "mydb2", 0, NULL, CLIENT_MULTI_STATEMENTS);    if (mysql == NULL)    {        ret = mysql_errno(mysql);        printf("func mysql_real_connect() err\n");        return ret;    }    else    {        printf(" ok......\n");    }    /* execute multiple statements */status = mysql_query(mysql,"DROP TABLE IF EXISTS test_table;\CREATE TABLE test_table(id INT);\INSERT INTO test_table VALUES(10);\UPDATE test_table SET id=20 WHERE id=10;\SELECT * FROM test_table;\DROP TABLE test_table");    if (status)    {        printf("Could not execute statement(s)");        mysql_close(mysql);        exit(0);    }    /* process each statement result */    do {            /* did current statement return data? */            result = mysql_store_result(mysql);            if (result)            {                /* yes; process rows and free the result set */                process_result_set(mysql, result);                mysql_free_result(result);            }            else /* no result set or error */            {                if (mysql_field_count(mysql) == 0)                {                    printf("%lld rows affected\n",                    mysql_affected_rows(mysql));                }                else /* some error occurred */                {                    printf("Could not retrieve result set\n");                    break;                }            }        /* more results? -1 = no, >0 = error, 0 = yes (keep looping) */        if ((status = mysql_next_result(mysql)) > 0)                printf("Could not execute statement\n");    } while (status == 0);    mysql_close(mysql);}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我在农村不当队长我当代表怎么办 北京本地人社保中间断了一年怎么办 我想把大哥的孩子带出国要怎么办 美国有亲戚想让孩子出国怎么办 连接温控器的线断了怎么办 植发后好多原生发都脱落了怎么办 4岁宝宝支体能力差怎么办 当与游客发生矛盾时员工怎么办 顾客与同事发生矛盾你该怎么办 当一个人犯下的过错难以原谅怎么办 开车把别人撞成植物人了该怎么办 结婚证丢了孩子上不上学了怎么办 办房产证前加户主姓名怎么办手续 孩子上学户口跟房产不在一起怎么办 我家小孩被别的家长打了怎么办 要是小孩骗家长说老师打他怎么办 孩子在学校被家长打小孩怎么办 小孩在学校被老师打淤青家长怎么办 小孩和家长一吵架就说死怎么办 王者荣耀号被别人家长联接了怎么办 儿子12岁总是跟大人顶嘴怎么办 课堂上有学生和你顶嘴你怎么办 小孩看到大人吵架就哭了 怎么办 五年级的孩子叛逆爱发脾气怎么办 6个月孩子多动怎么办呀 小孩被大人打了很生气该怎么办 小孩在学校调皮被老师打了怎么办 四岁宝宝咳嗽半个月了怎么办 三岁宝宝咳嗽半个月了还不好怎么办 孩子在幼儿园不听话天天罚站怎么办 孩子个性太强脾气太倔不听话怎么办 孩子有十七了太不听话了怎么办 小孩的学籍填错了怎么办还能改吗 生完孩子后脾气暴躁易怒怎么办 生完孩子之后变懒了怎么办呀? 孩子三年级了成绩不突出家长怎么办 自私势力的父母想把我害死怎么办 父母如果养出自私的孩子怎么办 大人得了地图舌怎么办要怎么治疗 请问我家小孩有心理儿问题怎么办 想离婚妻子拿孩子命威胁怎么办