昨天碰到了一個存儲過程出錯,但是mysqlapi的QUERY并不返回錯誤的問題。
后來才知道,調(diào)用存儲過程,會返回一個調(diào)用情況的結(jié)果集,也就是最后一個結(jié)果集。如果前面有別的結(jié)果集,query會返回成功,當(dāng)next_result返回>0的值時,就表示調(diào)用情況結(jié)果集出現(xiàn)錯誤,這時用errno和error就可以獲取到這個錯誤了。
折騰了半天,連mysql命令行工具的代碼我都拉下來看了,結(jié)合API文檔,才搞明白這事情。
mysql.cc里的代碼是這幾句
mysql_free_result(result);
} while (!(err= mysql_next_result(&mysql)));
if (err >= 1)
error= put_error(&mysql);
檢查最后一次next_result的值是否>0,是的話就輸出錯誤。
我猜想,mysql是想盡可能多的返回結(jié)果,就算下面的存儲過程出錯,也要返回出錯前已經(jīng)select到的結(jié)果集。