MySQL存储过程PHP JSON响应

时间:2013-10-30 11:41:24

标签: php mysql json stored-procedures

我们一直在用PHP运行与MySQL数据库交互的服务层来构建移动应用程序。我想进一步在MySQL数据库中实现存储过程来执行获取数据的任务。通过删除任何SQL来自PHP代码。

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

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

我对PHP,MySQL和移动应用程序开发也相对较新。基于我过去使用Oracle PL / SQL的经验,我认为在数据库中编写查询真的很有用。

1 个答案:

答案 0 :(得分: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用户定义函数的第三方库(服务器扩展,用C / C ++编写,不要与存储的函数混淆),可以在服务器上生成JSON。

https://github.com/mysqludf/lib_mysqludf_json

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