PHP中的数据库类;只有一个功能 – 关于实践的问题以及是否是一个
所以我在
PHP中有这个数据库类,我只有1个函数(除__construct和__destruct之外.让我进一步解释一下……
我最初编写它是因为当我连接到数据库时,我只需要调用我的函数connect_to_db(),它返回一个mysqli对象.然后我使用了这个对象函数( – > query(),– > prepare(),– > bind_param()等等)来做任何事情.这个混乱(并且仍然是因为我还没有将我的代码转换到我的新类),其中包含很多只执行特定操作的函数,例如: function get_country_info($db,$usrid) { $statement = "select `name`,`population`,`money`,`food` from `countries` where `usr_id` = ?"; $qry = $db->prepare($statement) or trigger_error("get_country_info():statement failed..."); $qry->bind_param("i",$usrid); $qry->execute(); $qry->bind_result($name,$population,$money,$food); $qry->fetch(); $res = array("name" => $name,"pop" => $population,"money" => $money,"food" => $food); return $res; } 我原本打算做的只是为了清楚起见将它们放到一个类中,但我实际上最终做的是创建一个类,在创建时为特定数据库创建一个mysqli对象(通过参数提供)并在销毁时关闭关闭此链接.我非常想不必担心键入$db-> close();当脚本完成执行连接时关闭. 它只有1个其他功能;查询().此函数可以处理提出的任何查询,并将其作为多维数组输出.它使用eval().根据我的理解,这通常是不赞成的 – 但是eval()非常有用;那为什么不赞成呢? 我猜这个功能可能很慢,但我只是把它用于一个宠物项目(基于浏览器的乡村管理游戏)而且我没有注意到任何我根本不担心的事情.我担心的是人们是否通常会在“现实世界”中执行此操作,或者是否存在某种标准,人们会这样做,或者通常使用PHP中包含的内容(或可添加的内容) ? 我是自学成才,所以有时我真的不知道做事的最佳方式.也许有人可以在这里建议我? 有问题的功能可以在这里看到:http://pastebin.org/353721,因为它的~60行,我不想让页面混乱.我也没有对它进行过广泛的测试(我甚至不知道单元测试是什么,所以我通过很多不同的方式使用函数测试)所以它可能有问题我不知道你们可以指出出. 谢谢. 解决方法
对我来说似乎不太糟糕.你基本上已经在数据库周围完成了一个非常基本的包装器,并且你在数据库独立性方面迈出了第一步,这很好.
这对于小型和组织良好的项目来说可能是好的,但是一旦你开始变得更复杂,你很快就会注意到你的方法有一个很大的缺点:你仍然在网站周围分割你的SQL查询.在您更改数据库中的任何内容的那一天,您需要浏览所有站点并查找所有SQL语句:这很糟糕(我必须这样做一次……). 您现在应该将所有SQL代码移动到一个位置.所以有各种选择.在类似的上下文中,我使query()方法受到保护,然后使Db类“抽象”并将其子类化.每个子类都是一个类,它包含与特定表集相关的几个方法,这是您找到SQL的唯一位置.项目的其余部分只能调用这些方法. 或者,更好的是,您可以使用ORM(oblect关系映射器)将每个表映射到一个对象. 关于逃避的罪恶:我从未使用过它们.但我以为我不会使用“goto”,因为它是邪恶的,然后我发现了那个完美契合的神奇之处.所以,如果您已经调查了所有可能性,并且您认为这是最佳解决方案……请使用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |