Php SQL对象-如何正确使用它
我创建了这个类来处理我所有的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
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并准备报表,但这对我来说会是更多的工作。