9 MySQL::MySQL(std::string Servername, std::string Username, std::string Password, std::string Database, int Port)
13 // logfile << "Connecting to database";
15 OpenDatabase(Servername, Username, Password, Database, Port);
19 if(m_LastResult != NULL)
21 mysql_free_result(m_LastResult);
25 // logfile << "Shutting down database connection";
27 mysql_close(&m_DBHandle);
30 void MySQL::OpenDatabase(std::string Servername, std::string Username, std::string Password, std::string Database, int Port)
32 mysql_init(&m_DBHandle);
33 if(!mysql_real_connect(&m_DBHandle, Servername.c_str(), Username.c_str(), Password.c_str(), Database.c_str(), Port, NULL, 0))
35 std::stringstream error;
36 error << "Could not connect to server: " << mysql_error(&m_DBHandle);
37 throw new MySQLException(error.str(), mysql_errno(&m_DBHandle));
39 m_Servername = Servername;
40 m_Username = Username;
41 m_Password = Password;
42 m_Database = Database;
46 void MySQL::Reconnect()
48 OpenDatabase(m_Servername, m_Username, m_Password, m_Database, m_Port);
50 void MySQL::Query(std::string SQLQuery)
53 // logfile << SQLQuery;
57 if(mysql_query(&m_DBHandle, SQLQuery.c_str()) != 0)
59 std::stringstream error;
60 error << "Error querying server: " << mysql_error(&m_DBHandle) << std::endl << "SQL: " << SQLQuery;
61 throw new MySQLException(error.str(), mysql_errno(&m_DBHandle));
64 catch(DatabaseException *ex)
66 if(ex->getErrorCode() == CR_SERVER_LOST)
68 // logfile << "Reconnecting to server" << std::endl;
77 uint64 MySQL::Select(std::string SQLQuery)
80 std::cout << "Doing query " << SQLQuery << std::endl;
83 if(m_LastResult != NULL) {
85 std::cout << "Freeing up previous result" << std::endl;
87 mysql_free_result(m_LastResult);
91 std::cout << "Transferring result from database server" << std::endl;
94 m_LastResult = mysql_store_result(&m_DBHandle);
95 if(m_LastResult == NULL)
97 std::stringstream szError;
98 szError << "Error while transferring result from database server: " << mysql_error(&m_DBHandle);
99 throw new MySQLException(szError.str(), mysql_errno(&m_DBHandle));
102 std::cout << "Result transferred OK" << std::endl;
106 int MySQL::SelectUnbuffered(std::string SQLQuery)
109 if(m_LastResult != NULL) {
111 // logfile << "Freeing up previous result";
113 mysql_free_result(m_LastResult);
117 logfile << "Transferring result from database server";
120 m_LastResult = mysql_use_result(&m_DBHandle);
121 if(m_LastResult == NULL)
123 std::stringstream szError;
124 szError << "Error while transferring result from database server: " << mysql_error(&m_DBHandle);
125 throw new MySQLException(szError.str(), mysql_errno(&m_DBHandle));
128 // logfile << "Result transferred OK";
130 return mysql_num_rows(m_LastResult);
135 if(m_LastResult == NULL)
138 std::cout << "Fetching MySQL row" << std::endl;
140 m_Row = mysql_fetch_row(m_LastResult);
144 std::cout << "row == NULL" << std::endl;
147 if(mysql_errno(&m_DBHandle) > 0)
149 std::stringstream szError;
150 szError << "Error while fetching row from database server: " << mysql_error(&m_DBHandle);
151 throw new MySQLException(szError.str(), mysql_errno(&m_DBHandle));
158 const unsigned char* MySQL::GetText(int Column)
160 return (const unsigned char*)m_Row[Column];
162 int MySQL::GetInt(int Column)
164 if(m_Row[Column] == NULL)
167 std::cout << "Returning NULL from MySQL::GetInt()";
173 std::stringstream log;
174 log << "mysql atoi() " << Column << " " << m_Row[Column];
175 logfile.AddLine(log.str());
178 return atoi(m_Row[Column]);
180 __int64 MySQL::GetInt64(int Column)
183 return _atoi64(m_Row[Column]);
185 __int64 MySQL::GetLastInsertID()
187 return (__int64)mysql_insert_id(&m_DBHandle);
189 __int64 MySQL::GetAffectedRows()
191 return (__int64)mysql_affected_rows(&m_DBHandle);
193 void MySQL::Escape(std::string &Data)
195 int tmpsize = Data.size() * 2 + 1;
197 char tmp[8096];// = new char[tmpsize];
198 memset(tmp, 0x00, sizeof(tmp));
199 usedsize = mysql_real_escape_string(&m_DBHandle, tmp, Data.c_str(), Data.size());
200 Data.assign(tmp, usedsize);