我是使用 gwan 服务器(链接)的新手,就此而言,我可以用 c 编程。我想知道在 gwan 服务器的 c 脚本中使用 mysql 的最简单方法是什么?
我已经尝试了这里使用的dbi.c,项目页面可以在这里找到,但也发现有一个用于mysql本身的c API,你可以在这里找到。
有人有使用其中之一或两者的经验吗?有哪些优点/缺点?有没有其他库可以让像我这样的菜鸟更容易连接到 mysql?
任何帮助表示赞赏。
谢谢!
[编辑]还有 libdbi 线程安全吗?似乎不是。
[编辑2]看起来 mysql lib 本身是一个简单的方法,除非您认为以后可能会切换数据库类型,因为 libdbi 似乎能够具有不同的驱动程序,这对于抽象来说很好。
与 GWAN 有关,如果我在处理程序的主函数中有任何"mysql 代码",它似乎是不安全的并且间歇性地导致随机错误,但是如果我将"mysql 代码"放在 init 函数中并将我需要的任何数据放在从全局指针之一访问的 kv 存储中,随机错误完全消失了。(我正在使用libdbi,我认为对于mysql api来说是一样的)
希望这有帮助
我总是更喜欢使用本机 c api...
#pragma link "/usr/lib/libmysqlclient.so"
#include "gwan.h"
#include <mysql/mysql.h>
int
main (int argc, char **argv)
{
MYSQL_RES *result;
MYSQL_ROW row;
MYSQL conn, *conn_h;
conn_h = mysql_init (&conn);
if (!conn_h)
{
return 200;
}
if (!mysql_real_connect (conn_h, "localhost", ctx->usr, ctx->psw, NULL, 0, NULL, 0))
{
mysql_close (conn_h);
return 200;
}
mysql_select_db (conn_h, "");
char *query = "";
if (mysql_query (conn_h, query))
{
mysql_close (conn_h);
return 200;
}
result = mysql_store_result (conn_h);
if (!result)
{
mysql_close (conn_h);
return 200;
}
if (mysql_num_rows (result) == 0)
{
return 200;
}
while ((row = mysql_fetch_row (result)))
{
/* do something with row[i] */
}
mysql_free_result (result);
mysql_close (conn_h);
return 200; // Ok
}
请记住,如果您计划生成线程,则需要初始化 mysql 库(此代码不是线程安全的)。
希望这在某种程度上对您有所帮助。