如何将SQL与PHP分开?

时间:2009-08-27 17:28:40

标签: php sql refactoring

Clean Code的Bob叔叔之后,我想在我的PHP代码中没有SQL。目前我正在使用Prepared Statements,我已将我的数据库访问代码考虑到模型类中。

我最初的想法是将我的SQL分解为单独的SQL文件,然后在运行时加载它们。由于这涉及更多的磁盘IO(我的直觉),我想知道是否有人建议采取另一种方式。

另外,我很想知道是否有人试过这个以及分红(如果有的话还清)。

谢谢。

3 个答案:

答案 0 :(得分:7)

如果您只是想分开SQL,为什么不使用存储过程?

答案 1 :(得分:7)

我给你的建议是不要犯这么多错误试图把PHP变成不是的东西。

PHP是一种支持Web的模板语言,允许您在HTML页面中嵌入代码。它有一个请求生命周期而不是持久性(就像Java servlet一样)。它的API在很大程度上是程序性的。

这些都不是问题。

然而,你会发现那些坚持试图强迫对象模型,ORM以及他们习惯使用的其他结构从C#或Java编程到PHP的人,这通常是一个错误。

要专门回答您的问题,我倾向于将所有查询(函数)放在一个文件中(如果有很多文件,则会更多,在这种情况下,我会通过数据库或某些功能分离将它们分开)而SQL只是函数中的heredocs。不在整个yoru代码中嵌入SQL逻辑很有用。

您可以将SQL放在文本文件中并在其上使用file_get_contents(),但您获得了什么?

在绞尽脑汁并尝试将其他语言和框架的原则应用于PHP时,没有任何意义。使用PHP来擅长(或使用别的东西)。无论如何,你会更开心。

答案 2 :(得分:4)

我认为您正在寻找的是数据访问层。我还没有读过“清洁代码”,但我猜想鲍勃叔叔正在考虑的是到处都没有一堆原始的SQL和数据库设置/访问代码。摘要将数据库准备,执行等代码编写到一个单独的模块中并从那里开始工作。

关于使用存储过程的评论也是一个好主意恕我直言,虽然这是一个备受争议的话题,双方都有好的观点。我倾向于使用SP,但它们不适合所有人或所有情况。