昨天碰到了一個存儲過程出錯,但是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到的結果集。