用c脚本连接到mysql?

用c脚本连接到mysql?,mysql,c,g-wan,Mysql,C,G Wan,我对使用gwan server()和c语言编程还不熟悉。我想知道在gwan服务器的c脚本中使用mysql最简单的方法是什么 我已经使用dbi.c进行了实验,可以找到项目页面,但也发现mysql本身有一个c API,您可以找到它 有人有使用其中一个或两者的经验吗?有哪些优点/缺点?对于像我这样的noob来说,还有其他库可以让连接mysql变得容易吗 谢谢你的帮助 谢谢 [编辑] libdbi也是线程安全的吗?似乎不是 [编辑2] mysql库本身似乎是一种简单的方法,除非您认为以后可能会切换数据库

我对使用gwan server()和c语言编程还不熟悉。我想知道在gwan服务器的c脚本中使用mysql最简单的方法是什么

我已经使用dbi.c进行了实验,可以找到项目页面,但也发现mysql本身有一个c API,您可以找到它

有人有使用其中一个或两者的经验吗?有哪些优点/缺点?对于像我这样的noob来说,还有其他库可以让连接mysql变得容易吗

谢谢你的帮助

谢谢

[编辑] libdbi也是线程安全的吗?似乎不是

[编辑2] mysql库本身似乎是一种简单的方法,除非您认为以后可能会切换数据库类型,因为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
}
#pragma链接/usr/lib/libmysqlclient.so”
#包括“gwan.h”
#包括
int
主(内部argc,字符**argv)
{
MYSQL_RES*结果;
MYSQL_行;
MYSQL-conn,*conn_h;
conn_h=mysql_init(&conn);
如果(!conn_h)
{
返回200;
}
如果(!mysql\u real\u connect(conn\u h,“localhost”,ctx->usr,ctx->psw,NULL,0,NULL,0))
{
mysql_close(conn_h);
返回200;
}
mysql_select_db(conn_h,“”);
char*query=“”;
if(mysql_查询(conn_h,query))
{
mysql_close(conn_h);
返回200;
}
结果=mysql存储结果(连接);
如果(!结果)
{
mysql_close(conn_h);
返回200;
}
if(mysql_num_rows(result)==0)
{
返回200;
}
while((row=mysql\u fetch\u row(result)))
{
/*对第[i]行执行某些操作*/
}
mysql_免费_结果(result);
mysql_close(conn_h);
返回200;//确定
}
请记住,如果计划生成线程,则需要初始化mysql库(此代码不是线程安全的)


希望这对您有所帮助。

那么他们的连接方式是线程安全的吗?我的印象是gwan使用线程同时进行许多连接。@sbditto85该连接始终是线程安全的。只有在连接中生成线程时才需要注意,我看到的到目前为止几乎没有什么用处。但是你不需要使用线程安全库吗<代码>线程安全客户端库libmysqlclient\r对于每个连接都是线程安全的还是我误解了事情?再次抱歉,我仍然是c编程的noob。@sbditto85 gwan使用线程处理传入的连接。它的工作方式与您的c脚本(servlet)无关,您的连接在服务器上始终是线程安全的。如果您在脚本中生成线程,您应该像处理任何其他资源一样,处理两个或多个线程同时访问连接。只有在某些情况下(取决于脚本),才必须使用libmysqlclient\r。无论如何,在脚本中使用多个线程时,必须始终初始化mysql库(mysql_library_init())。@sbditto85只是为了澄清一下:我们有两种连接,一种是在gwan和mysql服务器之间,另一种是在浏览器和gwan之间。后者由gwan负责。首先,我们必须照顾好自己(使用适当的mysql代码)。