1

我们一直在使用 PHP 构建移动应用程序,播放与 MySQL 数据库交互的服务层。我正在考虑进一步在 MySQL 数据库中实现存储过程以执行获取数据的任务。通过从 PHP 中删除任何 SQL代码。

我确实在网上查了相关信息,但找不到太多。以下是我的一些担忧:

  • MySQL 存储过程能否返回用户定义的数据类型,如列表?(根据我可以搜索和发现的内容,似乎这些仅作为 IN 参数被接受)。
    • 返回整个 JSON 格式的字符串(是的,我知道这会有点重)会对性能产生负面影响吗?

我对 PHP、MySQL 和移动应用程序开发也比较陌生。根据我过去使用 Oracle PL/SQL 的经验,我认为在数据库中编写查询确实是有利的。

4

1 回答 1

1

存储函数返回一个单一的标量值,它可以代表你的应用程序需要的任何东西,并且存储过程可以通过它的OUT参数返回值,但是,对我来说更有趣和有用的是一个过程可以返回一个或多个使用过程主体中的一个或多个无界SELECT语句将结果集传递给客户端。无界SELECTSELECT不嵌套在子查询中的,不是游标声明的一部分,也不是SELECT ... INTO语句的一部分:

MySQL 支持一个非常有用的扩展,它允许在SELECT存储过程中使用常规语句(即,不使用游标或局部变量)。这种查询的结果集直接发送给客户端。多SELECT条语句生成多个结果集,所以客户端必须使用支持多结果集的 MySQL 客户端库。

http://dev.mysql.com/doc/refman/5.6/en/stored-routines-syntax.html(在所有 5.x 版本中都支持)

对于您的客户来说,这些看起来就像您发出SELECT查询时所看到的......因此您可以返回您的应用程序可以用 JSON 包装的元素表。

或者...还有一个 MySQL 用户定义函数的 3rd 方库(服务器扩展,用 C/C++ 编写,不要与存储函数混淆),可以在服务器上生成 JSON。

https://github.com/mysqludf/lib_mysqludf_json

我会试试这个吗?是的,我会试试这个。在数据库服务器中组装 JSON 对象是最有效或最好的处理方式吗?这当然值得商榷,但我们可以整天思考和辩论这方面的理论问题,并且不会比我们开始时更接近解决方案。

于 2013-10-30T14:27:36.370 回答