我正在使用 C++ 中的嵌入服务器(链接到 mysqld)连接到 mysql 数据库。我有以下代码:
static char *server_options[] = \
{ (char *)"mysql_test",
(char *)"--datadir=/home/cquiros/temp/mysql/db2",
(char *)"--default-storage-engine=MyISAM",
(char *)"--loose-innodb=0",
(char *)"--local-infile=1",
(char *)"--skip-grant-tables=1",
(char *)"--myisam-recover=FORCE",
(char *)"--key_buffer_size=16777216",
(char *)"--character-set-server=utf8",
(char *)"--collation-server=utf8_bin",
NULL };
int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;
mysql_library_init(num_elements, server_options, NULL);
m_mysql = mysql_init(NULL);
char enable_load_infile = 1;
if (mysql_options(m_mysql,MYSQL_OPT_LOCAL_INFILE, (const char *)&(enable_load_infile)))
qDebug() << "Error setting option";
mysql_real_connect(m_mysql, NULL,NULL,NULL, "database1", 0,NULL,0);
连接有效,我可以查询和创建表,但是,当我尝试执行“加载数据本地 infile ...”时,我总是得到“此 MySQL 版本不允许使用的命令”,即使我正在设置 - -local-infile=1 在服务器选项中或在代码中设置:
char enable_load_infile = 1;
if (mysql_options(m_mysql,MYSQL_OPT_LOCAL_INFILE, (const char *)&(enable_load_infile)))
qDebug() << "Error setting option";
知道我做错了什么以及如何解决吗?
非常感谢您的帮助。 卡洛斯。
最佳答案
@QLands 我意识到你问这个问题已经一年多了,但我想我只是为了后代才回答,以防其他像我这样的人在谷歌上搜索解决方案。
我遇到了同样的问题,在/etc/mysql/my.cfg 文件中明确启用它后,我可以从 Linux mysql CLI 获取 LOAD DATA LOCAL INFILE 语句。但是我无法让它与 MySQL C++ 连接器一起工作——当我尝试通过 MySQL C++ 连接器运行 LOAD DATA LOCAL INFILE 命令时,我也收到错误“此 MySQL 版本不允许使用该命令”。 wtf 对吗?
经过大量勤奋的谷歌搜索并找到一些后巷技术支持帖子后,我得出结论,MySQL C++ 连接器没有(无论出于何种原因)决定为开发人员实现能够允许 local-infile= 1 个选项。显然有些人已经能够 hack/fork MySQL C++ 连接器来公开功能,但没有人发布他们的源代码——只是说它有效。显然,在您初始化连接后,MySQL C API 中有一个变通方法:
mysql_options( &mysql, MYSQL_OPT_LOCAL_INFILE, 1 );
以下是一些使我得出此结论的引用文章:
1.) How can I get the native C API connection structure from MySQL Connector/C++?
2.) Mysql 5.5 LOAD DATA INFILE Permissions
3.) http://osdir.com/ml/db.mysql.c++/2004-04/msg00097.html
基本上,如果您想要使用 LOAD DATA LOCAL INFILE 功能的能力——您必须使用 mysql C API 或从命令行执行它,或者破解/派生现有的 mysql C++ api 以公开连接结构 :(
关于c++ - 将 mysql embedded 和 --local-infile=1 与 c++ 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8647505/