-2

非常に基本的な質問です。データベースへのクエリを生成する関数を作成しています。これには2つのアプローチがあり、どちらが優れているかわかりません。

まず、必要なクエリを生成するための 1 つの大きな関数を作成することです。基本的には次のとおりです。

function generateQuery($object, $queryType, $tableName, $conditions = null) {
    //Then in here some more complex code that generates query,
    //some of stuff like double if shorthands etc, for example:

    $string = ($queryType === "INSERT") ? "INSERT INTO {$table} (" : (($queryType === "UPDATE") ? "UPDATE {$table} SET" : "SELECT");

    //So all the code for generating INSERT, UPDATE and SELECT in one function
    //full of conditions.
}

または、クエリの種類ごとに個別の関数を作成することもできます。

結局、最初の解決策はそれほど複雑ではなく、2 番目の解決策はコード内でいくらかの繰り返しを行うことになりますが、それでも少し間違っているように感じます。

次に、後で PDO トランザクションを使用したいので、次のような関数を用意します。

function launchQueries($list) {
    $this->handler->beginTransaction();

    for($i = 0; $i < count($list); $i++)
    {
        $this ->launchQuery($list[i]->object, $list[i]->$table, $list[i]->queryType, $list[i]->conditions);
    }
    $this->handler->commit();
}

またはそのようなもの、まだ作成していないため、この正確なコードが機能するかどうかはわかりません.

とにかく、1 つの関数でクエリを生成すると、クエリをリストに渡し、1 つのループを実行してすべてを生成して実行することができます。しかし、それはまだ間違っていると感じています。それはまったくこのように行われますか、それとも別のより良い解決策がありませんか?

4

1 に答える 1

0

私が間違っていると感じるのは、車輪の再発明です。

Doctrine DBALなどのしっかりした既存のライブラリを使用するのはどうですか?

クロスプラットフォームで、insert()update()delete()などの便利なメソッドを提供します。

$conn->insert('user', array('username' => 'jwage'));
$conn->update('user', array('username' => 'jwage'), array('id' => 1));
$conn->delete('user', array('id' => 1));
于 2013-09-21T10:59:35.837 に答える