Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用MySQL与C中的2个数据库交互?_Mysql_C - Fatal编程技术网

如何使用MySQL与C中的2个数据库交互?

如何使用MySQL与C中的2个数据库交互?,mysql,c,Mysql,C,我目前正在做一个项目,我必须计算跑步者的数量。在某个时刻,我必须将数据从本地数据库mysqlLocal传输到我在mysqlLycee工作的一所高中 我认为这样做是一个好主意,但由于某种原因,我在执行程序时出现了SEGFULT #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netdb.h> #i

我目前正在做一个项目,我必须计算跑步者的数量。在某个时刻,我必须将数据从本地数据库mysqlLocal传输到我在mysqlLycee工作的一所高中

我认为这样做是一个好主意,但由于某种原因,我在执行程序时出现了SEGFULT

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <mysql.h>


int main(int argc, char *argv[]){
    MYSQL mysqlLocal;
    MYSQL_RES *result = NULL;
    MYSQL_ROW row;
    char requete[150];
    int num_champs;
    char noParticipant[5];
    char kmParcourus[3];
    mysql_init(&mysqlLocal);
    if(!mysql_real_connect(&mysqlLocal,"127.0.0.1","root","debianCCF","localCCF",0,NULL,0))printf("Error on first connect");

    sprintf(requete,"SELECT NO_PARTICIPANT, KMPARCOURUS FROM PARTICIPANTS WHERE NO_COURSE = %s",argv[5]);
    if(!mysql_query(&mysqlLocal,requete))printf("Error on first query");
    result = mysql_use_result(&mysqlLocal);
    num_champs=mysql_num_fields(result);
    mysql_close(&mysqlLocal);

    MYSQL mysqlLycee;
    mysql_init(&mysqlLycee);
    if(!mysql_real_connect(&mysqlLycee,argv[1],argv[2],argv[3],argv[4],0,NULL,0))printf("Error on second connect");
    int i;
    while ((row = mysql_fetch_row(result))){
        unsigned long *lengths;     
        lengths = mysql_fetch_lengths(result);
        for(i=0;i<num_champs;i++){
            if(i==0)sprintf(noParticipant,"%.*s", (int) lengths[i], row[i] ? row[i] : "NULL");
            if(i==1)sprintf(kmParcourus,"%.*s", (int) lengths[i], row[i] ? row[i] : "NULL");
        }   
        sprintf(requete,"UPDATE PARTICIPANTS SET KMPARCOURUS=%s WHERE NO_PARTICIPANT=%s",kmParcourus,noParticipant);
        if(!mysql_query(&mysqlLycee,requete))printf("Error on second query");

    }
    mysql_free_result(result);
    mysql_close(&mysqlLycee);
    return 0;
}
我正在使用Debian 8,并使用以下命令进行编译:

gcc updatelyce.c-o updatelyce-lmysqlclient-L/usr/lib64/mysql-I/usr/include/mysql


编辑:添加了mysql检查,但启动程序时仍会出错。

关闭与本地数据库的连接,然后稍后尝试从与该连接关联的结果集中获取行。那是行不通的

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <mysql.h>


int main(int argc, char *argv[]){
    MYSQL mysqlLocal;
    MYSQL_RES *result = NULL;
    MYSQL_ROW row;
    char requete[150];
    int num_champs;
    char noParticipant[5];
    char kmParcourus[3];
    mysql_init(&mysqlLocal);
    if(!mysql_real_connect(&mysqlLocal,"127.0.0.1","root","debianCCF","localCCF",0,NULL,0))printf("Error on first connect");

    sprintf(requete,"SELECT NO_PARTICIPANT, KMPARCOURUS FROM PARTICIPANTS WHERE NO_COURSE = %s",argv[5]);
    if(!mysql_query(&mysqlLocal,requete))printf("Error on first query");
    result = mysql_use_result(&mysqlLocal);
    num_champs=mysql_num_fields(result);
    mysql_close(&mysqlLocal);

    MYSQL mysqlLycee;
    mysql_init(&mysqlLycee);
    if(!mysql_real_connect(&mysqlLycee,argv[1],argv[2],argv[3],argv[4],0,NULL,0))printf("Error on second connect");
    int i;
    while ((row = mysql_fetch_row(result))){
        unsigned long *lengths;     
        lengths = mysql_fetch_lengths(result);
        for(i=0;i<num_champs;i++){
            if(i==0)sprintf(noParticipant,"%.*s", (int) lengths[i], row[i] ? row[i] : "NULL");
            if(i==1)sprintf(kmParcourus,"%.*s", (int) lengths[i], row[i] ? row[i] : "NULL");
        }   
        sprintf(requete,"UPDATE PARTICIPANTS SET KMPARCOURUS=%s WHERE NO_PARTICIPANT=%s",kmParcourus,noParticipant);
        if(!mysql_query(&mysqlLycee,requete))printf("Error on second query");

    }
    mysql_free_result(result);
    mysql_close(&mysqlLycee);
    return 0;
}
如果要将数据从一个DB传输到另一个DB,则必须

首先,将一个数据库中所有需要的数据读入内存,获取所有行并将所需内容存储在普通数组中,例如,或

保持与两个数据库的连接同时打开


请为每个MySQL调用添加错误检查。我修改了代码以进行MySQL检查,但无论如何,当我执行程序时,会出现segfault。空格和换行符很便宜;使用它们。谢谢你的帮助!我尝试保持两个连接,但也遇到了问题。但存储数据实际上是我没有想到的解决方案!