1

すべての 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 が過負荷になるのでしょうか? (例 #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 が DB から最も多くのリソースを取得すると仮定すると、例 2 ではなく例 1 を選ぶのはいつですか?

4

1 に答える 1

0

あなたの例2はより一般的ですが、SQLオブジェクトは通常静的/シングルトンです。したがって、サーバー要求ごとに 1 回データベースに接続します。

ベース 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 (およびその他の取得、更新、挿入) は、テーブルごとに異なります。

于 2013-04-23T10:01:25.833 に答える