mysql - C 中的 LOAD DATA 不允许使用命令

标签 mysql c load-data-infile

我在 C 语言中遇到 LOAD DATA 问题。

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

The used command is not allowed with this MySQL version.

这是我的代码:

    #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);
}

最佳答案

现在它正在进行更改以显式设置 MYSQL_OPT_LOCAL_INFILE 选项。

有用的链接

  1. Security Issues with LOAD DATA LOCAL
  2. mysql_options()

MYSQL_OPT_LOCAL_INFILE选项信息

MYSQL_OPT_LOCAL_INFILE (argument type: optional pointer to unsigned int)

If no pointer is given or if pointer points to an unsigned int that has a nonzero value, the LOAD LOCAL INFILE statement is enabled.

因此通过给出空值(相当于没有给出指针)来解决问题:

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);
}

关于mysql - C 中的 LOAD DATA 不允许使用命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30864154/

相关文章:

php - 通知: Undefined index ajax

php - 当 mysql 到远程服务器时,LOAD DATA LOCAL INFILE 不起作用

c - opencl 映射内存不起作用

php - 构建DNSKEY RR的RDATA部分

c - 在 C 编程语言中按字母顺序对数组进行排序?

MySQL LOAD XML LOCAL INFILE 删除变音符号和 ß

sql - 使用命令行将excel数据导入mysql表

c# - 如何将 mysql 查询转换为可接受的 c# 字符串?

mysql - 在mysql中将时间转换为秒

php - ZF2 - 用于全词搜索的 MySQL 正则表达式