昨天碰到了一个存储过程出错,但是mysqlapi的QUERY并不返回错误的问题。
后来才知道,调用存储过程,会返回一个调用情况的结果集,也就是最后一个结果集。如果前面有别的结果集,query会返回成功,当next_result返回>0的值时,就表示调用情况结果集出现错误,这时用errno和error就可以获取到这个错误了。
折腾了半天,连mysql命令行工具的代码我都拉下来看了,结合API文档,才搞明白这事情。
mysql.cc里的代码是这几句
mysql_free_result(result);
} while (!(err= mysql_next_result(&mysql)));
if (err >= 1)
error= put_error(&mysql);
检查最后一次next_result的值是否>0,是的话就输出错误。
我猜想,mysql是想尽可能多的返回结果,就算下面的存储过程出错,也要返回出错前已经select到的结果集。