0

編集したいPHPベースのレシピと食事プランのスクリプトを見つけました。

データベースにあるすべてのレシピのリストから選択することにより、すべてのユーザーが独自の日替わりメニュー/食事プランを作成できるようにするMealPlanクラスがあります。

ユーザーのレベルに基づいて、挿入ステートメントで使用されるテーブル/列の名前を切り替えたい。

元の挿入方法は次のとおりです。

// Insert Meal Plan
function insert($date, $meal, $recipe, $servings, $owner) {
        global $DB_LINK, $db_table_mealplans, $LangUI;

        $date = $DB_LINK->addq($date, get_magic_quotes_gpc());
        $meal = $DB_LINK->addq($meal, get_magic_quotes_gpc());
        $recipe = $DB_LINK->addq($recipe, get_magic_quotes_gpc());
        $servings = $DB_LINK->addq($servings, get_magic_quotes_gpc());
        $owner = $DB_LINK->addq($owner, get_magic_quotes_gpc());

        $sql = "INSERT INTO $db_table_mealplans (
          mplan_date,
          mplan_meal,
          mplan_recipe,
          mplan_servings,
          mplan_owner)
          VALUES (
          '$date',
          $meal,
          $recipe,
          $servings,
          '$owner')";
        $rc = $DB_LINK->Execute($sql);
        DBUtils::checkResult($rc, NULL, $LangUI->_('Recipe already added on:'.$date), $sql);
}

私の考えは変えることでした:

mplan_date,
mplan_meal,
mplan_recipe,
mplan_servings,
mplan_owner

に:

$mplan_date,
$mplan_meal,
$mplan_recipe,
$mplan_servings,
$mplan_owner

そして、switchステートメントを使用してテーブル/列の名前を変更します。しかし、私はこの種のことはOOPで嫌われていると言われました。これについて行くための最良の方法は何ですか?

(注:必要に応じてクラス全体を投稿できますが、これで十分な情報になると考えました)

4

1 に答える 1

1

私はあなたのためのコードを持っていませんが、私は最近これに似た何かをしました。基本的には、ユーザーの入力内容に応じて文字列を連結して動的にSQL文字列を作成しました。私がその場で何かをタイプしようとするとき、私と一緒に耐えてください。

$columnsArray = array();
$sqlCmd = "INSERT INTO";

If (someCondition) {
    array_push($columnsArray, "mplan_date");
}//Could try turning this into a loop and just push all 
 //applicable columns into the array

$counter = 0;

Foreach ($columnsArray as $columnName) {
    $sqlCmd .= " $columnName";
    $counter++
    If ($counter < count($columnsArray)){
        $sqlCmd .= ",";
    }//This will put a comma after each column with the 
     //exception of the last one.
}

したがって、データを取得するためのユーザー定義のselectステートメントのみを使用してこのようなことを行いました。基本的に、ユーザー定義のSQLステートメントとなるカスタム文字列を作成するまでロジックを続行し、それを実行します。これには、上記のスクリプトと同様のことを実行して、値を文字列に連結することが含まれます。

これがあなたにいくつかのアイデアを与えることを願っています。

于 2012-11-13T20:56:05.710 に答える