Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL对象-如何正确使用它_Php_Sql_Class_Object_Mysqli - Fatal编程技术网

Php SQL对象-如何正确使用它

Php SQL对象-如何正确使用它,php,sql,class,object,mysqli,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, $crit

我创建了这个类来处理我所有的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,是否会导致DB过载?参考示例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);
与例2相比,例1如何以及何时是更好的选择,反之亦然


如果我假设示例1将从数据库中获取最多的资源,那么您什么时候会选择示例1而不是示例2?

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

$sql = new sql();
$dbInfo = $sql->select($var,$tab,$cri);
$moreInfo = $sql->select($var2,$tab2,$cri2);
$evenMoreInfo = $sql->select($var3,$tab3,$cri3);
基本SQL对象应该处理与数据库的连接,然后处理基本输入/输出,例如执行SQL字符串并返回结果

然后,您可以在每个对象/表的基础上添加新对象,然后与此SQL单例接口。这些类将根据它们的表、联接、字段名/类型等来处理构造它们的自定义SQL

例如:

一个非常基本的“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等函数的基类,那么它们工作得更好。GetByID和其他GET、更新、插入将因表而异。

至少在第二个示例中,您将连接到数据库onceAlso,尽管这个问题被简化了,但我仍然不明白它将如何处理联接、子选择,其中的条件,如YEARdate介于“2010”和“2013”之间,或者cat在1,2,3中,按等分组…您确定要将$id直接注入查询吗?这只是他给出的一个基本示例。我个人会使用PDO并准备报表,但这对我来说会是更多的工作。