我已经让这个类来处理我的所有SQL查询。但我不确定如何正确使用它。
该类看起来像这样(这是一个非常简单的版本):
class sql {
private $conn;
private $data;
function __construct() {
//makes connection to DB and sets $conn and $data
}
public function select($variables, $table, $criterias) {
//returns an array with all the info from DB
}
function __destruct() {
//closes the sql-connection
}
}
现在的问题是:如果我在每次页面加载时多次使用它,这是否会使数据库超载? (参见示例#1)
$dbInfo = (new sql)->select($var,$tab,$cri);
$moreInfo = (new sql)->select($var2,$tab2,$cri2);
$evenMoreInfo = (new sql)->select($var3,$tab3,$cri3);
将sql
类的方法设为静态是否有益?
或者,每次我想进行查询时都不应该创建sql
对象的新实例(如下例所示 - 参考示例#2)?
$sql = new sql();
$dbInfo = $sql->select($var,$tab,$cri);
$moreInfo = $sql->select($var2,$tab2,$cri2);
$evenMoreInfo = $sql->select($var3,$tab3,$cri3);
示例#1如何以及何时比示例#2更好,反之亦然?
如果我假设示例#1将从数据库中获取最多的资源,那么您何时会选择示例#1而不是示例#2?
答案 0 :(得分:0)
您的示例2更常见,但SQL对象通常是静态/单例。因此,每个服务器请求一次连接到数据库。
您的基础SQL对象应该处理连接到数据库,然后处理基本输入/输出,例如执行SQL字符串并返回结果。
然后,您可以为每个对象/表添加新对象,而不是与此SQL单例的接口。这些类将根据其表,连接,字段名称/类型等来处理构建自定义SQL。
E.g:
一个非常基本的'table'对象看起来像这样
class SomeTableObject
{
m_TableName = 'SomeTable'; // Table to get Data from
function GetSelectSQL()
{
return "SELECT * FROM ".$this->m_TableName;
}
function Select($where)
{
$sql = $this->GetSelectSQL().$where;
return SqlSingleton::Execute($sql);
}
function GetByID($id)
{
$where = " WHERE FieldNameForID=$id";
return $this->Select($where);
}
}
如果这些对象扩展了具有基本GetSelectSQL,TableName,Select等功能的基类,则这些对象的效果会更好。 GetByIDs(以及其他获取,更新,插入)因表格而异。