LOAD DATA in C 不允许使用命令
LOAD DATA in C The used command is not allowed
我对 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
选项。
有用的链接
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);
}
我对 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
选项。
有用的链接
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);
}