2017-09-12 35 views
0

让我解释一下。存储过程内部的SQL查询与从PHP执行的SQL不同吗?

我使用了大量SELECT一句有多个我的PHP代码中加入。这是很大的,因为一些连接从第一表(东西一些值取决于像if table1.column_a=1 then alias_b=table2.column_a, if table1.column_a=2 then alias_b=table3.column_b, ...)因为我从我的html形式发送条件可以动态地改变(有时它可能只是有some_date>='2017/09/01',但它可能会变成更复杂的东西像some_date>='2017/09/01'和(名称,如J%onsec_name='Doe')...“)。

我接到让一个存储过程此查询的指导和更多的时间,我需要分析这个我不能找到使这个动态查询某种方式没有把它串入存储过程和接收WHERE条件作为存储过程parametter(在存储过程中,我有财产以后像SET @sql = CONCAT('SELECT ... JOIN ... JOIN... WHERE ',param_condition); PREPARE stmt FROM @sql;...")

我的问题是...这是一样的发送从sql从PHP?

+4

如果您需要发送实际的SQL查询的部分存储过程,那么你做错了什么(这将是一个痛苦的调试)。如果你有不同的情况,那么你可以为这些情况创建不同的存储过程,并简单地调用当时相关的那个。或者,根据输入变量,使程序本身决定要执行的操作。 –

+0

@MagnusEriksson实际上我正在构建我的PHP代码中的SQL,但正如我所提到的,我收到了一条指令来创建一个存储过程。我认为存储过程和动态查询是完全不相关的两件事情。我的PHP模块的目标是允许用户以不同的方式查询信息,这些信息可能适用于使用where clausule内部的一个或多个标准的任何必要条件。欢迎任何其他方法推荐。谢谢。 – FoxEdu

+0

_“我收到了指令”_--来自谁和为什么? –

回答

2

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

如果正在构建的查询的内容依赖于其他表数据,那么在存储过程中执行它可能会更好,因此您不需要数据库和PHP之间的多次往返来获取所有信息。

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