728x90
MYSQL       *connection=NULL, conn;
MYSQL_RES *sql_result;
MYSQL_ROW sql_row;
int query_stat;

char name[12];
char address[80];
char tel[12];
char query[255];

mysql_init(&conn);

connection = mysql_real_connect(&conn, DB_HOST,
DB_USER, DB_PASS,
DB_NAME, 3306,
(char *)NULL, 0);

위와같이 MYSQL 형 conn 은 MYSQL 형 Socket 을 생성하기 때문에, 연결된 소켓을 connection 에 넘기면 mysql_close 시에 segmentation fault 가 난다.


#include <my_global.h>
#include <mysql.h>

int main(int argc, char **argv)
{  
  MYSQL *con = mysql_init(NULL);

  if (con == NULL) 
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_pswd", 
          NULL, 0, NULL, 0) == NULL) 
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }  

  if (mysql_query(con, "CREATE DATABASE testdb")) 
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}

이와 같이 conn 은 1개여야 한다. 절대로 connection 같은것을 만들어 넘기지 않도록 한다.

'LINUX' 카테고리의 다른 글

C and CPP replace string for function  (0) 2018.07.12
Random String generator in C  (0) 2018.07.04
Mod_Security2 Ajax Blocking Problem  (0) 2018.06.25
Curl in C usage  (0) 2018.06.24
Dynamic Library and Static Library  (0) 2018.06.24

+ Recent posts