我遇到一个关于简单MySQL函数的问题,mysql_fetch_row
当我使用它时,我的应用程序将崩溃,它会在执行时发生。
无论我运行什么查询,它都会崩溃。核心转储说:
(gdb) bt full
#0 0x2866397f in mysql_store_result () from /usr/home/ld/application
#1 0x28637905 in main () from /usr/home/ld/application
#2 0x08441d3a in CRC_GetCodeSize20 ()
代码看起来很简单:
int main()
{
MYSQL *conn; // the connection
MYSQL_RES *res; // the results
MYSQL_ROW row; // the results row (line by line)
struct connection_details mysqlD;
mysqlD.server = "localhost"; // where the mysql database is
mysqlD.user = "mysqlusername"; // the root user of mysql
mysqlD.password = "mysqlpassword"; // the password of the root user in mysql
mysqlD.database = "mysql"; // the databse to pick
conn = mysql_connection_setup(mysqlD);
res = mysql_perform_query(conn, "select 1, 2");
printf("Result:\n");
while ((row = mysql_fetch_row(res)) !=NULL)
printf("%s\n", row[0]);
mysql_free_result(res);
mysql_close(conn);
return 0;
}
有什么问题?
mysql_perform_query:
MYSQL_RES* mysql_perform_query(MYSQL *connection, char *sql_query)
{
if (mysql_query(connection, sql_query))
{
printf("MySQL query error : %s\n", mysql_error(connection));
exit(1);
}
return mysql_use_result(connection);
}
答案 0 :(得分:4)
确定。所以我花了很多时间来重现这个问题。我假设您从本教程中采用了示例:http://www.codingfriends.com/index.php/2010/02/17/mysql-connection-example/,因为它完全相同。
采取的步骤:
cd / usr / ports / databases / mysql56-client&& make install
将上述教程中的确切代码复制粘贴到test.cpp
g ++ -I / usr / local / include / mysql -L / usr / local / lib / mysql -lmysqlclient test.cpp
./ a.out的
输出:
数据库中的Mysql表: 条目 老
我使用了远程mysql服务器和测试帐户。首先,我确保可以通过控制台mysql -h mydomain.com -u test -p
该程序似乎正常工作。我注意到的唯一事情是,有时需要1秒才能执行,而其他时间则需要10秒才能执行。
基于PC-BSD Isotope Edition(9.1 RELEASE)构建,具有最新的端口树。
所以现在有2个人成功建造(我和你的朋友)。代码是相同的唯一我能想到的错误是libmysqlclient.so库。尝试更新您的端口树并进行全新构建。或者尝试不同的版本。
答案 1 :(得分:0)
您可以尝试使用netstat命令查看已注册的 * 端口 *,因为它可能崩溃的原因是,您使用的是已经注册的你的dbase的端口。检查一下。
此外,如果您发现在 已经 注册的端口上工作,请尝试更改S / W中的端口号以及必须从注册表中删除该值的端口号(注册表)。(有时它使用影子端口,所以需要这样做。)
同样检查“conn”中的null,不知何故,你可能无法启动连接。 (连接池耗尽?非常值得怀疑)。