2010-08-31 83 views
8

我有一堆漂亮的OOP代码,但功能有这些怪异巨大的SQL查询。在2010年,我们是否真的应该继续编写查询语句,或者是否有像MVC这样的抽象,用于PHP中的SQL查询?在代码中组织SQL查询的最佳实践?

谢谢你的见解。

编辑:我可能应该在这里提到这一点。但作为一名专业的PHP工程师,您不会相信我经常遇到的ORM经常可怕地(甚至更糟糕!)ORMs编程正确,执行绝对可怕(尤其是多对多和多连接查询)。我对ORM非常不利,除了几个简单的ORM,例如Kohana

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

回答

8

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

一个很好的资源,学习在MySQL存储过程是本书:

mysql stored procedure programming

+2

从应用程序+1数据访问应该通过存储特效 – CaffGeek 2010-08-31 20:09:23

1

您可以使用Doctrine ORM进行调查。不知道这是否是你所要求的。

1

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

3

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

1

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

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

这是一个了不起的开源项目。一探究竟。

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

1

我喜欢使用PHP的OOP一个静态DB类和使用存储过程(SP)方法。

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

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

例如

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

这也可以很容易地将东西作为API实现到您的项目中。

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

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