在 c 脚本中连接到 mysql



我是使用 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 库(此代码不是线程安全的)。

希望这在某种程度上对您有所帮助。

相关内容

  • 没有找到相关文章

最新更新