【问题标题】:SQL object - How to use it properlySQL 对象 - 如何正确使用它
【发布时间】:2013-04-16 11:47:09
【问题描述】:

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

【问题讨论】:

  • 至少在第二个示例中,您将连接到数据库一次
  • 另外,好像这个问题被简化了,我仍然不明白它将如何处理 JOINS、子选择、WHERE YEAR(date) BETWEEN '2010' AND '2013' OR cat IN (1,2,3)、GROUP BY 等 WHERE 条件......

标签: php sql class object mysqli


【解决方案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 等函数的基类,它们会更好地工作。 GetByID(以及其他获取、更新、插入)因表而异。

【讨论】:

  • 您确定要将 $id 直接注入到查询中吗?
  • 这只是他给出的一个基本示例。我个人会使用 PDO 和准备好的语句,但这对我来说工作量更大。
猜你喜欢
  • 2014-12-22
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多