在代码中组织SQL查询的最佳实践?

时间:2010-08-31 19:54:23

标签: php sql

我有一堆漂亮的OOP代码,但这些函数有着巨大的SQL查询。在2010年,我们是否真的仍然在线编写查询,或者在PHP中是否存在用于SQL查询的抽象,如MVC?

感谢您的见解。

编辑:我可能应该在这里提到这一点。但作为一名专业的PHP工程师,你不会相信我多久经常遇到过ORM,而且(甚至更糟!)正确编程的ORM执行得非常糟糕(尤其是多对多和多个连接查询)。我对ORM非常偏向,只有一些简单的ORM,例如Kohana

我想我正在寻找的是一种通用的动态SQL设计模式。

6 个答案:

答案 0 :(得分:8)

您可以在存储过程中编写查询(选择,插入,更新,删除...),只能从您的PHP代码中调用这些存储过程,而不是在您的php文件中编写查询。

这本书是学习mysql存储过程的一个很好的资源:

mysql stored procedure programming

答案 1 :(得分:3)

我不了解PHP,但你可以使用ORM。维基百科有一个很好的list ORM软件。

答案 2 :(得分:1)

您可以查看使用Doctrine ORM。不确定这是否是你要求的。

答案 3 :(得分:1)

一种好方法是使用ORM,例如Doctrine

答案 4 :(得分:1)

我主要在Joomla工作并为sql生成开发了自己的OO包装器。 但是当我在非joomla项目上工作时,我总是使用db2php,这是Netbeans IDE插件。 它甚至可以轻松执行复杂的查询。

模型的生成需要几次点击,一切都已完成。

这是非常棒的开源项目。看看吧。

http://code.google.com/p/db2php/

答案 5 :(得分:1)

我喜欢使用PHP的OOP方法和静态数据库类以及存储过程(SP)的使用。

这样,所有Mysql代码都存储在服务器中,您可以使用SP内部的预准备语句实现权限检查以及复杂查询。使用Postgres,可以使用函数。

这允许使用通用代码构建SP调用的干净数据库类。最好是代理的方法接受对象作为参数,这样PHP开发人员可以专注于他的代码并享受他的IDE中的phpdoc的所有好处(自动完成!)。

e.g。

$x = new SEARCH_ITEM();
$x->name = $blab;
$resObj = $this->db->search_item($x);

这也使得将项目作为项目的API实现变得容易。

如果你不习惯,写SP很多。

周围有好的软件吗?我想有很好的抽象包我不知道......在这个意义上我没有看到像PDO或Adodb这样的抽象层。 Creole或Propel更像我正在考虑的东西。查询不是代码的一部分,并且正在使用像PDO这样的抽象层构建。我没有尝试克里奥尔语和推进。