2013-04-23 89 views
1

我已经使这个类来处理我所有的SQL查询。但我不确定如何正确使用它。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 
    } 
} 

现在的问题是:这样做超负荷DB,如果我多次使用它的每一页上-加载? (refered为实例#1)

$dbInfo = (new sql)->select($var,$tab,$cri); 
$moreInfo = (new sql)->select($var2,$tab2,$cri2); 
$evenMoreInfo = (new sql)->select($var3,$tab3,$cri3); 

将是有益的,使我sql类的方法静态的?

或者每次我想进行查询时(例如下面的例子 - 引用为例2),我不应该创建一个sql对象的新实例吗?

$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

在第二个例子中,您将连接到数据库*一次* – 2013-04-23 10:03:31

+0

另外,就像这个问题被简化了一样,我仍然不明白它将如何处理JOINS,子选择,WHERE条件如WHERE YEAR (日期)'2010'和'2013'之间或猫IN(1,2,3)',GROUP BY等...... – 2013-04-23 10:07:22

回答

-1

您的示例2更常见,但SQL对象通常是静态/单例。因此,它根据服务器请求连接到数据库一次。

您的基本SQL对象应处理连接到数据库,然后处理基本输入/输出,如执行SQL字符串并返回结果。

然后,您可以为每个对象/表添加新的对象,然后再与此SQL单例接口。这些课程将根据他们的桌子处理建设自己的自定义SQL,连接,字段名/类型等

如:

一个非常基本的“表”对象看起来像这样

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

+0

您确定要直接在查询中注入$ id吗? – 2013-04-23 10:10:18

+0

这只是他给出的一个基本例子。我会亲自使用PDO并准备好声明,但对我来说这会更有用。 – MatthewMcGovern 2013-04-23 10:11:04