欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

如果使用单态模式调用数据库?

程序员文章站 2022-06-17 12:56:40
...
请问如果使用单态模式调用数据库,方法中有返回结果集,以及数据库连接对象
我知道连接对象是在析构时销毁,请问返回的结果集改如何释放,我知道可以在方法中赋值给数组然后返回数组,释放结果集,但有时候就需要返回结果集而不是数组,请问释放结果集应该如果调用?
是在类中再写一个方法比如 free() 然后在类外调用吗?感觉这样写不好,请问大家是怎么处理的啊。

回复讨论(解决方案)

如果返回的是结果集资源,那么就没必要封装数据库操作了
比如

$rs = db::getInstance()->query($sql);$row = mysql_fetch_assoc($rs);
你不觉得很怪异吗?

封装的目的是为了简化操作,自然会丢失一些灵活性
单例的数据库对象显然只宜缓存最后一次查询的结果集,不然无论是你想读取或释放都将因不知道操作哪个结果集而无所适从

如果返回的是结果集资源,那么就没必要封装数据库操作了
比如

$rs = db::getInstance()->query($sql);$row = mysql_fetch_assoc($rs);
你不觉得很怪异吗?

封装的目的是为了简化操作,自然会丢失一些灵活性
单例的数据库对象显然只宜缓存最后一次查询的结果集,不然无论是你想读取或释放都将因不知道操作哪个结果集而无所适从

谢谢版主神速回复?
返回的是结果集不事宜封装,刚看了下网上很多数据库操作类都是返回的结果集啊,晕啊
版主能在费心指教下吗,另外请教下用单态类连接数据库项目中使用的多吗?

先明确一下 结果集资源和结果集对象的区别
结果集资源(resource)比如 mysql_query('select ...') 返回的一个资源号
结果集对象(object) 比如 mysqli_query('select ...') 返回的一个 mysqli_result 对象

你自己封装数据库类,也是可以让 db::query 返回一个对象(比如 db_result)