4

私はgwanサーバー(リンク)を使用するのが初めてで、そのことについてはcでプログラミングしています。gwan サーバーの ac スクリプトで mysql を使用する最も簡単な方法は何ですか?

ここで使用されている dbi.c を試してみました。プロジェクト ページはここにありますが、mysql 自体の ac API もここにあります。

どちらかまたは両方を使用した経験のある方はいらっしゃいますか? 長所/短所は何ですか? 私のような初心者にとって、mysql への接続を簡単にする他のライブラリはありますか?

どんな助けでも感謝します。

ありがとう!

[編集] また、libdbi はスレッドセーフですか? そうではないようです。

[編集2] libdbiは抽象化に適したさまざまなドライバーを持つことができるように見えるため、後でデータベースタイプを切り替える可能性があると思わない限り、mysql lib自体が簡単な方法のようです。

私にとってGWANに関連して、ハンドラーのメイン関数に「mysqlコード」があった場合、安全ではないように見え、ランダムエラーが断続的に発生しましたが、「mysqlコード」をinit関数に入れて必要なデータを入れた場合グローバル ポインタの 1 つからアクセスされた kv ストアでは、ランダム エラーは完全になくなりました。(私はlibdbiを使用していましたが、mysql APIでも同じだと思います)

お役に立てれば

4

1 に答える 1

4

私は常にネイティブの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 ライブラリを初期化する必要があることに注意してください (このコードはスレッドセーフではありません)。

これが何らかの形で役立つことを願っています。

于 2012-07-06T14:07:01.003 に答える