From 93da8da13f7af27d9a884bacf9e0157f31827905 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Tue, 2 Jun 2015 00:43:47 +0100 Subject: Fix behaviour of multiple executions --- libmysqlpp/selectcommand.cpp | 7 ++++++- libmysqlpp/selectcommand.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libmysqlpp/selectcommand.cpp b/libmysqlpp/selectcommand.cpp index 41b28b6..f0a5974 100644 --- a/libmysqlpp/selectcommand.cpp +++ b/libmysqlpp/selectcommand.cpp @@ -8,6 +8,7 @@ MySQL::SelectCommand::SelectCommand(const Connection * conn, const std::string & DB::Command(sql), DB::SelectCommand(sql), MySQL::Command(conn, sql), + prepared(false), executed(false) { } @@ -15,7 +16,7 @@ MySQL::SelectCommand::SelectCommand(const Connection * conn, const std::string & void MySQL::SelectCommand::execute() { - if (!executed) { + if (!prepared) { bindParams(); fields.resize(mysql_stmt_field_count(stmt)); for (Binds::iterator i = fields.begin(); i != fields.end(); ++i) { @@ -68,6 +69,9 @@ MySQL::SelectCommand::execute() if (mysql_stmt_bind_result(stmt, &fields.front())) { throw Error(mysql_stmt_error(stmt)); } + prepared = true; + } + if (!executed) { if (mysql_stmt_execute(stmt)) { throw Error(mysql_stmt_error(stmt)); } @@ -86,6 +90,7 @@ MySQL::SelectCommand::fetch() case 0: return true; case MYSQL_NO_DATA: + executed = false; return false; default: throw Error(mysql_stmt_error(stmt)); diff --git a/libmysqlpp/selectcommand.h b/libmysqlpp/selectcommand.h index 7ffff54..58c569b 100644 --- a/libmysqlpp/selectcommand.h +++ b/libmysqlpp/selectcommand.h @@ -15,6 +15,7 @@ namespace MySQL { void execute(); private: + bool prepared; bool executed; Binds fields; }; -- cgit v1.2.3