Suppose the parameter SQL already contains more than one SQL statement. such as SQL = "INSERT INTO table1 (...) Values (...); Update table2 set a=1; ";
const BOOL Cdboperator::multiquery (const std::string SQL, std::string& error)
{int res = 0;bool ret = false; mysql_res* result = null;std::string e;try{//disable autocommitif (! Autocommit (autocommit_disable, error)) {return false;} res = Mysql_real_query (M_mysql, Sql.c_str (), sql.length ());/if query FailIf (0! = Res) {error = mysql_error (m_mysql); Rollback (e); Autocommit (Autocommit_enable, E); return false;} do{/* did current statement return data? */result = Mysql_store_result (M_mysql); if (result) {mysql_free_result (result);} else {/* No result set or error */if (Mysql_field_count (m_mysql) = = 0) {printf ("%lld rows affected\n", Mysql_affected_row S (m_mysql));} else {/* Some error occurred */printf ("Could not retrieve result set\n"); /* More results? -1 = no, >0 = error, 0 = yes (keep looping) */if ((res = Mysql_next_result (m_mysql)) > 0) printf ("Could not execute S Tatement\n ");} while (res = = 0); ret = Commit (error); Autocommit (Autocommit_enable, E); if (!ret) {return false;} return true;} catch (...) {error = mysql_error (M_mysql); return false;}
MySQL C connector Multiple SQL statement execution example