SQL对象 - 如何正确使用它

时间:2013-04-23 09:57:06

标签: php sql class object mysqli

我已经让这个类来处理我的所有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?

1 个答案:

答案 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(以及其他获取,更新,插入)因表格而异。