#include #include #include #include #include #include "sqllib.h" char errmsg[1000]; MYSQLCONN conn[SQL_COMMANDS]; /*******************************************************************/ /* miscellaneous support routines (error handling etc) */ /*******************************************************************/ void output_error(int sql_num) { sprintf(errmsg,"Error %u (%s)", mysql_errno(&conn[sql_num].mysql), mysql_error(&conn[sql_num].mysql)); printf("%s\n", errmsg); } /*******************************************************************/ /* sql connect */ /*******************************************************************/ int sql_connect(int sql_num, char *host, char *user, char *passwd) { /* check not already connected? */ if (conn[sql_num].connected) { printf("sql connect; already connected."); return 0; } if (! (mysql_connect(&conn[sql_num].mysql, host, user, passwd))) { output_error(sql_num); return 0; } else { conn[sql_num].connected = 1; return 1; } } int sql_disconnect(int sql_num) { /* check that we are connected? */ if (! conn[sql_num].connected) { printf("sql disconnect; not connected."); return 0; } mysql_close(&conn[sql_num].mysql); conn[sql_num].connected = 0; return 1; } /*******************************************************************/ /* sql general commands */ /*******************************************************************/ int sql_selectdb(int sql_num, char *database) { /* check that we are connected to a mysql server */ if (!conn[sql_num].connected) { printf("sql query statement; you are not connected to a mysql server yet (sql connect)."); return 0; } if (mysql_select_db(&conn[sql_num].mysql, database)) { output_error(sql_num); return 0; } else { return 1; } } /*******************************************************************/ /* sql query command */ /*******************************************************************/ int sql_query(int sql_num, char *query) { if (! conn[sql_num].connected) { printf("sql query statement; you are not connected to a mysql server yet"); return 0; } /* check there is no other active query? */ if (conn[sql_num].qflag) { printf("Another query cannot be made until the current query has been finished with \"sql endquery\"."); return 0; } /* execute the sql query statement */ if (mysql_query(&conn[sql_num].mysql, query)) { output_error(sql_num); return 0; } conn[sql_num].result = mysql_use_result(&conn[sql_num].mysql); conn[sql_num].nfields = mysql_field_count(&conn[sql_num].mysql); /* if no results were found and none expected then all ok */ /* otherwise we assume the query worked ok, now get the results */ if (conn[sql_num].result == NULL) { if (conn[sql_num].nfields) { output_error(sql_num); return 0; } // show_msg("sql startquery; query executed ok but returned no results."); return 1; } /* return all ok now, see fetchrow & endquery for more details */ conn[sql_num].qflag = 1; return 1; } MYSQL_FIELD *sql_fetchfield(int sql_num) { /* check we are connected? */ if (! conn[sql_num].connected) { printf("Not connected to a server."); return NULL; } /* check we had a query started? */ if (! conn[sql_num].qflag) { printf("No query has been started."); return NULL; } return mysql_fetch_field(conn[sql_num].result); } MYSQL_ROW sql_fetchrow(int sql_num) { /* check we are connected? */ if (! conn[sql_num].connected) { printf("Not connected to a server."); return NULL; } /* check we had a query started? */ if (! conn[sql_num].qflag) { printf("No query has been started."); return NULL; } return mysql_fetch_row(conn[sql_num].result); } int sql_endquery(int sql_num) { /* check we are connected? */ if (! conn[sql_num].connected) { printf("Not connected to a server."); return 0; } /* check we had a query started? */ if (! conn[sql_num].qflag) { printf("No query has been started."); return 0; } mysql_free_result(conn[sql_num].result); conn[sql_num].qflag = 0; return 1; } .