#ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MYSQL #include "SQL.h" SQLConnection::SQLConnection(String host, String user, String passwd, String db, int port, String socket, unsigned long cflags) throw (GeneralException) : res(0) { mysql_init(&con); const char * phost = ((ugly_string) host).p; const char * puser = ((ugly_string) user).p; const char * ppasswd = ((ugly_string) passwd).p; const char * pdb = ((ugly_string) db).p; const char * psocket = ((ugly_string) socket).p; phost = *phost ? phost : 0; psocket = *psocket ? psocket : 0; if (!mysql_real_connect(&con, phost, puser, ppasswd, pdb, port, psocket, cflags)) { throw GeneralException("Could not connect to MySQL host " + host); } } SQLConnection::~SQLConnection() { mysql_close(&con); } void SQLConnection::query(String q) throw(GeneralException) { if (res) { mysql_free_result(res); } res = 0; if (mysql_real_query(&con, ((ugly_string)q).p, q.strlen())) { throw GeneralException(String("Couldn't run query ") + q); } res = mysql_store_result(&con); if (res) { nr = mysql_num_rows(res); nf = mysql_num_fields(res); fields = mysql_fetch_fields(res); na = mysql_affected_rows(res); ii = mysql_insert_id(res); } else { nr = 0; nf = 0; fields = 0; na = 0; ii = -1; } } int SQLConnection::numrows() { return nr; } int SQLConnection::numfields() { return nf; } AssocArray SQLConnection::fetchrow() { AssocArray r; MYSQL_ROW row; int i; row = mysql_fetch_row(res); for (i = 0; i < nf; i++) { r[fields[i].name] = row[i]; } return r; } int SQLConnection::numaffectedrows() { return na; } int SQLConnection::insertid() { return ii; } #endif