[Mysql-c++] 다중 쿼리 사용 , 프로시저 사용시 설정

데이터베이스

2020. 5. 28. 00:44

참고자료 : https://dev.mysql.com/doc/refman/8.0/en/c-api-multiple-queries.html

 

MySQL :: MySQL 8.0 Reference Manual :: 28.7.22 C API Multiple Statement Execution Support

28.7.22 C API Multiple Statement Execution Support By default, mysql_query() and mysql_real_query() interpret their statement string argument as a single statement to be executed, and you process the result according to whether the statement produces a re

dev.mysql.com

// ... 생략
mysql_set_server_option(&conn, enum_mysql_set_option::MYSQL_OPTION_MULTI_STATEMENTS_ON);
	connection = mysql_real_connect(&conn, host, user, pw, db, 3306, (const char*)nullptr, CLIENT_MULTI_STATEMENTS);
	if (connection == nullptr)
	{
		LOG("%d ERROR : %s, %d\n", mysql_errno(&conn), mysql_errno(&conn));
		return -1;
	}
	else
	{
		LOG("DB Connected!");
		if (mysql_select_db(&conn, db))
		{
			LOG("%d ERROR : %s, %d\n", mysql_errno(&conn), mysql_errno(&conn));
			return -1;
		}
	}
 // ... 생략
 
 
 // 사용
 
 Singleton<DBManager>::GetInst()->ProcessQuery(QUERY_MAKE_CHATTING_ROOM().c_str());
		MYSQL_RES* res = Singleton<DBManager>::GetInst()->GetsqlRes();

		while (auto row = mysql_fetch_row(res))
		{
			int roomkey = atoi(row[0]);
		}
		while (mysql_next_result(Singleton<DBManager>::GetInst()->GetConn()) > 0)
		{
		}

 

 

결국은 초기화시 mysql_set_server_option과 mysql_real_connect 부분의 마지막 파라미터 설정을 한 후

query 실행할 때 (만약에 해당 쿼리가 다중 쿼리나 프로시저 일 때) 원하는 작업을 끝낸 후

mysql_next_result가 0이 될 때까지 계속 돌려주면 그만이다.

 

조금 더 다듬는다면 mysql 클래스 내에서 모든 쿼리를 처리하게 할 수 있을 것 같다.

 

이것 때문에 오늘 구현 하려던 채팅 기능이 무로 돌아갔다 아 ..

무려 2시간반을 ㅠㅠ ... 처음엔 프로시저 문제라고 생각도 못했는데 흑흑

아무튼 db때문에 더 이상 고통 받고 싶지 않다. 지금 중요한게 db가 아니란 말이야 제발 ㅠ

'데이터베이스' 카테고리의 다른 글

[MySQL] C 연동시 한글 깨짐.  (0) 2020.05.11