2

MySQL の挿入/更新クエリをより動的にし、コーディングを高速化する方法を探しています。フォームに別のフィールドが必要な場合があるためです (たとえば、アプリケーションのプロトタイプを作成する場合)。これはばかげた質問かもしれません。

私の考えは、IDが一致する場合は挿入または更新を行い、テーブル/フィールドが存在しない場合は1つの関数で動的に作成することです。

<?php 
// $l is set with some db-login stuff

// creates and inserts
$f[] = nf(1,'this_id_x'); // this_id_* could be a prefix for ids
$f[] = nf('value yep',$fieldname_is_this2)
$tbl_name = "it_didnt_exist";
nyakilian_fiq($l, $tbl_name, $f);
// Done!


//This would do an update on above
$fieldname_is_this2 = "this is now updated";
$f[] = nf(1,'this_id_x'); 
$f[] = nf($fieldname_is_this2); // the function takes the variable name as field name
$tbl_name = "it_didnt_exist";
nyakilian_fiq($l, $tbl_name, $f);

?>
4

2 に答える 2

2

私はこの機能をうまく使っています。列は追加されませんが、それは私の MVC フレームワークの構造に反しています。次のようなことを試してください:

public function save(DatabaseConnection &$db)
{
    $properties = get_object_vars($this);
    $table = $this->getTableName();
    // $cols = array();
    // $values = array();
    foreach ($properties as $key => $value) {
        $cols[] = "`$key`";
        $values[] = '"'.$value.'"';
        if ($value != NULL) {
            $updateCols[] = "`$key`".' = "'.$value.'"';
        }
    }

    $sql = 'INSERT INTO '.$table.' ('.implode(", ", $cols).') VALUES ('.implode(", ",  $values).') ON DUPLICATE KEY UPDATE '.implode(", ", $updateCols);

    $stmnt = $db->prepare($sql);
    var_dump($stmnt);
    if ($stmnt->execute($values)) return true;
    return false;
}

各データベーステーブルの子クラスで拡張するモデル抽象クラスがあります。この関数は、モデルの抽象化に含まれています。各子クラスには、テーブル内の列名に対応するパブリック プロパティ [PDO::fetchObject() を使用できるようにするため] が含まれています。その場でテーブルを作成する必要がある場合は、その子クラスに関数を追加します。

于 2013-06-23T17:16:33.543 に答える