示例#1
0
/**
 * Disconnects the connection and unlinks the logger
 */
MySQLHandler::~MySQLHandler ()
{
	if (connection != NULL)
	{
		mysqlDisconnect ();
	}
	logger = NULL;
}
示例#2
0
文件: mysql.c 项目: dancahill/nsp
void mysql_murder(nsp_state *N, obj_t *cobj)
{
#define __FN__ __FILE__ ":mysql_murder()"
	MYSQL_CONN *conn;

	n_warn(N, __FN__, "reaper is claiming another lost soul");
	if ((cobj->val->type != NT_CDATA) || (cobj->val->d.str == NULL) || (nc_strcmp(cobj->val->d.str, "mysql-conn") != 0))
		n_error(N, NE_SYNTAX, __FN__, "expected a mysql conn");
	conn = (MYSQL_CONN *)cobj->val->d.str;
	mysqlDisconnect(N, conn);
	n_free(N, (void *)&cobj->val->d.str, sizeof(MYSQL_CONN) + 1);
	cobj->val->size = 0;
	return;
#undef __FN__
}
示例#3
0
/**
 * Perform a query (returns a result set)
 */
MYSQL_RES* MySQLHandler::mysqlQuery (const char *format, ...)
{
	lock (query_mutex);

	// Check to make sure we have a connection and then perform the query
	if (connection)
	{
		// Builds the query
		va_list args;
		va_start (args, format);
		
		char query[512];
		memset (query, 0, strlen (query));
		vsnprintf (query, 512, format, args);
		
		MYSQL_RES* temp_result_set;

		logger->debugf (DEBUG_DETAILED, " MYSQL DEBUG 3: mysqlQuery called with, %s.\n", query);

		lock (mysql_mutex);
		if (mysql_query (connection, query))
		{
			logger->debugf (DEBUG_MINIMAL, " MYSQL DEBUG 1: Query failed, %s.\n", mysql_error (connection));

			// If the server has disconnected, reconnect and try again
			if ((mysql_errno (connection) == CR_SERVER_GONE_ERROR) || (mysql_errno (connection) == CR_SERVER_LOST))
			{
				release (mysql_mutex);
				mysqlDisconnect ();
				mysqlConnect ();
				lock (mysql_mutex);
				if (mysql_query (connection, query))
				{
					logger->debugf (DEBUG_MINIMAL, " MYSQL DEBUG 1: Query failed again after reconnect, %s.\n", mysql_error (connection));
					va_end(args);
					release (mysql_mutex);
					release (query_mutex);

					return NULL;
				}
			}
			else
			{
				va_end(args);
				release (mysql_mutex);
				release (query_mutex);

				return NULL;
			}
		}

		temp_result_set = mysql_store_result (connection);

		va_end(args);
		release (mysql_mutex);
		release (query_mutex);

		return temp_result_set;
	}
	else
	{
		release (query_mutex);
		logger->log (" MYSQL: Failed to perform the query because there was no connection.\n");

		return NULL;
	}
}