Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.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中加载数据不允许使用命令_Mysql_C_Load Data Infile - Fatal编程技术网

Mysql 在C中加载数据不允许使用命令

Mysql 在C中加载数据不允许使用命令,mysql,c,load-data-infile,Mysql,C,Load Data Infile,我在C中加载数据时遇到问题 当我在命令行中执行LOAD DATA命令时,它工作得很好,但当我在C中尝试同样的操作时,它会说: 此MySQL版本不允许使用used命令 这是我的密码: #include <my_global.h> #include <mysql.h> #include <stdio.h> void finish_with_error(MYSQL *con) { fprintf(stderr, "%s\n", my

我在C中加载数据时遇到问题

当我在命令行中执行
LOAD DATA
命令时,它工作得很好,但当我在C中尝试同样的操作时,它会说:

此MySQL版本不允许使用used命令

这是我的密码:

    #include <my_global.h>
    #include <mysql.h>
    #include <stdio.h>

void finish_with_error(MYSQL *con)
{
    fprintf(stderr, "%s\n", mysql_error(con));
    mysql_close(con);
    exit(1);
}

int main(int argc, char **argv)
{
    MYSQL *con = mysql_init(NULL);

    if (con == NULL)
    {
        fprintf(stderr, "%s\n", mysql_error(con));
        exit(1);
    }

    if (mysql_real_connect(con, "localhost", "", "", "testdb", 0, NULL, 0) == NULL)
    {
        finish_with_error(con);
    }else{
    printf("MySQL client version: %s\n", mysql_get_client_info());
    }



    if (mysql_query(con, "LOAD DATA LOCAL INFILE '/home/lien/Dropbox/StageTolsma/1eOpdracht/TxtBestanden/01_0021_200912100000.txt' INTO TABLE input FIELDS TERMINATED BY ';=' LINES TERMINATED BY '\n;'"))
    {
        finish_with_error(con);
    }else{
        printf("File was uploaded to the database\n");
    }

    mysql_close(con);
    exit(0);
}
#包括
#包括
#包括
void finish_带有_错误(MYSQL*con)
{
fprintf(stderr,“%s\n”,mysql_错误(con));
mysql_close(con);
出口(1);
}
int main(int argc,字符**argv)
{
MYSQL*con=MYSQL_init(NULL);
如果(con==NULL)
{
fprintf(stderr,“%s\n”,mysql_错误(con));
出口(1);
}
if(mysql\u real\u connect(con,“localhost”、“”、“”、“testdb”、0、NULL、0)=NULL)
{
完成带有错误的任务(con);
}否则{
printf(“MySQL客户端版本:%s\n”,MySQL_get_client_info());
}
if(mysql_query(con,“将数据本地填充'/home/lien/Dropbox/StageTolsma/1eOpdracht/TxtBestanden/01_0021_200912100000.txt'加载到以“;=”结尾的表输入字段中,“\n;”结尾的行”)
{
完成带有错误的任务(con);
}否则{
printf(“文件已上载到数据库\n”);
}
mysql_close(con);
出口(0);
}

现在它正在进行更改,以显式设置
MYSQL\u OPT\u LOCAL\u infle
选项

有用的链接

  • MYSQL\u OPT\u LOCAL\u infle选项信息

    因此,通过提供空值(相当于未提供指针)修复了问题:

    工作代码

    #include <my_global.h>
        #include <mysql.h>
        #include <stdio.h>
    
    void finish_with_error(MYSQL *con)
    {
        fprintf(stderr, "%s\n", mysql_error(con));
        mysql_close(con);
        exit(1);
    }
    
    int main(int argc, char **argv)
    {
        MYSQL *con = mysql_init(NULL);
        mysql_options(con, MYSQL_OPT_LOCAL_INFILE, 0);  
    
        if (con == NULL)
        {
            fprintf(stderr, "%s\n", mysql_error(con));
            exit(1);
        }
    
        if (mysql_real_connect(con, "localhost", "", "", "testdb", 0, NULL, 0) == NULL)
        {
            finish_with_error(con);
        }else{
        printf("MySQL client version: %s\n", mysql_get_client_info());
        }
    
    
    
        if (mysql_query(con, "LOAD DATA LOCAL INFILE '/home/lien/Dropbox/StageTolsma/1eOpdracht/TxtBestanden/01_0021_200912100000.txt' INTO TABLE input FIELDS TERMINATED BY ';=' LINES TERMINATED BY '\n;'"))
        {
            finish_with_error(con);
        }else{
            printf("File was uploaded to the database\n");
        }
    
        mysql_close(con);
        exit(0);
    }
    
    #包括
    #包括
    #包括
    void finish_带有_错误(MYSQL*con)
    {
    fprintf(stderr,“%s\n”,mysql_错误(con));
    mysql_close(con);
    出口(1);
    }
    int main(int argc,字符**argv)
    {
    MYSQL*con=MYSQL_init(NULL);
    mysql\u选项(con,mysql\u OPT\u LOCAL\u infle,0);
    如果(con==NULL)
    {
    fprintf(stderr,“%s\n”,mysql_错误(con));
    出口(1);
    }
    if(mysql\u real\u connect(con,“localhost”、“”、“”、“testdb”、0、NULL、0)=NULL)
    {
    完成带有错误的任务(con);
    }否则{
    printf(“MySQL客户端版本:%s\n”,MySQL_get_client_info());
    }
    if(mysql_query(con,“将数据本地填充'/home/lien/Dropbox/StageTolsma/1eOpdracht/TxtBestanden/01_0021_200912100000.txt'加载到以“;=”结尾的表输入字段中,“\n;”结尾的行”)
    {
    完成带有错误的任务(con);
    }否则{
    printf(“文件已上载到数据库\n”);
    }
    mysql_close(con);
    出口(0);
    }
    
    请参阅。这能解决你的问题吗。当我在命令行中使用查询时,它正在工作,而不是在我的c代码中。所以我猜还有其他问题,但我不知道是什么:什么mysql版本,你能设置MYSQL\u OPT\u LOCAL\u infle吗?MYSQL的版本是5.5.43,我已经做了一些事情,比如在/etc/MYSQL/my中放入LOCAL infle=1。cnf@JessicaSchlapbach不要更改您在问题中给出的代码。相反,创建一个新的答案并在那里添加更改的代码。否则,这里的任何访客都可能会对什么起作用和什么不起作用感到非常困惑。
    mysql_options(con, MYSQL_OPT_LOCAL_INFILE, 0);
    
    #include <my_global.h>
        #include <mysql.h>
        #include <stdio.h>
    
    void finish_with_error(MYSQL *con)
    {
        fprintf(stderr, "%s\n", mysql_error(con));
        mysql_close(con);
        exit(1);
    }
    
    int main(int argc, char **argv)
    {
        MYSQL *con = mysql_init(NULL);
        mysql_options(con, MYSQL_OPT_LOCAL_INFILE, 0);  
    
        if (con == NULL)
        {
            fprintf(stderr, "%s\n", mysql_error(con));
            exit(1);
        }
    
        if (mysql_real_connect(con, "localhost", "", "", "testdb", 0, NULL, 0) == NULL)
        {
            finish_with_error(con);
        }else{
        printf("MySQL client version: %s\n", mysql_get_client_info());
        }
    
    
    
        if (mysql_query(con, "LOAD DATA LOCAL INFILE '/home/lien/Dropbox/StageTolsma/1eOpdracht/TxtBestanden/01_0021_200912100000.txt' INTO TABLE input FIELDS TERMINATED BY ';=' LINES TERMINATED BY '\n;'"))
        {
            finish_with_error(con);
        }else{
            printf("File was uploaded to the database\n");
        }
    
        mysql_close(con);
        exit(0);
    }