2011-05-31 76 views
0

我正在使用标准LAMP堆栈构建的项目中工作。目前,我只是将查询结果输出到页面上 - 结果并不存储在对象中。将数据库查询结果存储在PHP对象中

将来,我想编辑查询的结果。我想如果结果存储在PHP对象中会更容易。

将对象本身存储在数据库中(通过序列化/反序列化),还是在需要时创建对象(执行查询之后),然后在不再需要时摧毁它们会更有益?

+0

我不明白你为什么要这样做,为什么不使用标准的CRUD方法来改变你的数据? – 2011-05-31 19:48:42

回答

1

你最好将结果的副本直接存储在对象中,而不是序列化的结果句柄。序列化结果句柄不会保留结果集中的锁,服务器端变量,表状态,事务或数据。 MySQL没有规定以这种方式存储连接句柄,所以它会被看作是一个常规的断开连接,并导致未完成的查询被清理,变量被销毁,事务被回滚(或提交)等等......

同样,查询获取的数据实际上并没有通过连接获取,直到执行fetch_row()类型的调用,因此您的序列化句柄中甚至没有。

0

总是在php中创建对象,并在以后销毁它们。为了序列化,您需要使用longtext或类似的字段,这些字段已知很慢,而且您无法对它们编制索引。如果你总是选择全部,那么继续,但如果你使用条件或高级查询,你应该分开所有的数据。

0

这取决于很多因素。如果您一次又一次地运行完全相同的查询,那么是的,将结果存储在数据库中。但为什么要连载他们呢?如果您尝试使用Object-relational mapping,则可以更容易地维护查询对象,您可以将其存储在组织良好的关系数据库中。 如果你不是经常运行相同的查询,我会建议以另一种方式缓存输出。

0

将对象本身存储在数据库中(通过序列化/反序列化)还是在需要时创建对象(执行查询之后),然后在不再需要时将其销毁?

不是。有人在某处为你做了这件事。什么是有利的是你使用现有的ORM。无论哪一个,只需选择一个并使用它。你会提前光年,并在很短的时间内完成你的项目。

你应该使用一个PHP framework当你在它,其中许多来耦合到一个ORM。