Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储过程内部的SQL查询与从PHP执行的SQL不同吗?_Php_Mysql_Stored Procedures - Fatal编程技术网

存储过程内部的SQL查询与从PHP执行的SQL不同吗?

存储过程内部的SQL查询与从PHP执行的SQL不同吗?,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,让我解释一下 我在PHP代码中使用了一个带有多个连接的大型SELECT语句。它很大,因为一些联接依赖于第一个表中的一些值,比如如果table1.column_a=1,那么别名_b=table2.column_a,如果table1.column_a=2,那么别名_b=table3.column_b。。。因为我从html表单中发送条件,可以动态更改,有时它可能只是有一些日期>='2017/09/01',但它可能会变成更复杂的东西,比如一些日期>='2017/09/01',而不是sec_name='D

让我解释一下

我在PHP代码中使用了一个带有多个连接的大型SELECT语句。它很大,因为一些联接依赖于第一个表中的一些值,比如如果table1.column_a=1,那么别名_b=table2.column_a,如果table1.column_a=2,那么别名_b=table3.column_b。。。因为我从html表单中发送条件,可以动态更改,有时它可能只是有一些日期>='2017/09/01',但它可能会变成更复杂的东西,比如一些日期>='2017/09/01',而不是sec_name='Doe'上的名称,比如J%

我收到了为这个查询生成一个存储过程的指令,我花了更多的时间来分析它,我找不到一些方法使这个查询动态化,而不将它放入存储过程的字符串中,并在存储过程中接收WHERE条件作为存储过程参数,我有一些类似SET@sql=康卡特精选。。。参加参加其中,参数条件;从@sql;准备stmt


我的问题是。。。这与从php发送sql相同吗?

是的,从存储过程准备和执行语句与从php发送查询几乎相同。唯一的区别是连接所有片段的工作是在客户机上运行的PHP代码中完成的,还是在MySQL服务器上完成的

如果正在构造的查询的内容依赖于其他表数据,那么最好在存储过程中进行,这样就不需要在数据库和PHP之间进行多次往返来获取所有信息


但是如果它只依赖于PHP中已有的参数,那么最好用PHP构造查询,因为PHP语法可能更容易理解。性能差异应该很小-字符串连接对于PHP和MySQL都很简单。但是我通常认为,任何不依赖于SQL数据的操作都不应该在数据库服务器中完成。

是的,从存储过程准备和执行语句与从PHP发送查询几乎相同。唯一的区别是连接所有片段的工作是在客户机上运行的PHP代码中完成的,还是在MySQL服务器上完成的

如果正在构造的查询的内容依赖于其他表数据,那么最好在存储过程中进行,这样就不需要在数据库和PHP之间进行多次往返来获取所有信息


但是如果它只依赖于PHP中已有的参数,那么最好用PHP构造查询,因为PHP语法可能更容易理解。性能差异应该很小-字符串连接对于PHP和MySQL都很简单。但我通常认为,任何不依赖SQL数据的操作都不应该在数据库服务器中执行。

如果需要将实际SQL查询的一部分发送到存储过程,那么您就做了一些错误的操作,调试起来会很痛苦。如果您有不同的案例,那么您可以为这些案例创建不同的存储过程,只需调用当时相关的存储过程即可。或者,让过程本身根据输入变量决定要做什么。@MagnusEriksson事实上,我是在PHP代码中构造SQL的,但正如我所提到的,我收到了生成存储过程的指令。我认为存储过程和动态查询是两件根本不相关的事情。我的PHP模块的目标是允许用户使用where子句中的一个或多个条件,以不同的方式查询信息,以满足任何需要。欢迎任何其他建议。谢谢。我收到了指示——是谁和为什么给我的?我认为存储过程和动态查询是两件根本不相关的事情。你可能需要重新考虑一下这个想法。@Magnus Eriksson,来自启动该项目的合作伙伴。但聊了一会儿,我意识到他们知道Barmar提到的要点。如果需要将实际SQL查询的一部分发送到存储过程,那么您就做错了,调试起来会很痛苦。如果您有不同的案例,那么您可以为这些案例创建不同的存储过程,只需调用当时相关的存储过程即可。或者,让过程本身根据输入变量决定要做什么。@MagnusEriksson事实上,我是在PHP代码中构造SQL的,但正如我所提到的,我收到了生成存储过程的指令。我认为存储过程和动态查询是两件根本不相关的事情。我的PHP模块的目标是允许用户使用where子句中的一个或多个条件,以不同的方式查询信息,以满足任何需要。欢迎任何其他建议。谢谢。我收到了来自世卫组织和
为什么?我认为存储过程和动态查询是两件根本不相关的事情,您可能需要重新考虑这种想法。@Magnus Eriksson,来自启动该项目的合作伙伴。但聊了一会儿,我意识到他们知道巴尔马提到的要点。