sql >> データベース >  >> RDS >> Mysql

PDOを使用したヘルパー関数の挿入/更新

    私は通常、PDOを拡張するクラスを持っていますが、私のクラスはかなりカスタムです。クリーンアップしてテストした場合は、後で投稿します。ただし、これがシステムの解決策です。

    function dbSet($fields, &$values) {
        $set = '';
        $values = array();
    
        foreach ($fields as $field) {
            if (isset($_POST[$field])) {
                $set .= "`$field` = ?,";
                $values[] = $_POST[$field];
            }
        }
    
        return rtrim($set, ',');
    }
    
    $fields = explode(" ","name surname lastname address zip fax phone date");
    $_POST['date'] = $_POST['y']."-".$_POST['m']."-"$_POST['d'];
    
    $query  = "UPDATE $table SET ".dbSet($fields, $values).", stamp=NOW() WHERE id=?";
    $values[] = $id;
    
    $dbh->prepare($query);
    $dbh->execute($values);  
    

    これは完全ではない可能性があり、微調整を使用する可能性があります。 $dbhが考慮されます PDO接続でセットアップされます。私が行ったマイナーな構文の問題が発生するまで、それは機能するはずです。

    編集

    しかし、実際には、Doctrine ORM(または別のORM)に行くと思います。モデルをセットアップし、そこにすべての検証を追加すると、次のように簡単になります。

    $table = new Table();
    $table->fromArray($_POST);
    $table->save();
    

    これで、コンテンツを簡単に入力できるはずです。もちろん、これはDoctrineのようなORMを使用します。

    更新

    issetを配置するなど、最初のコードにいくつかの小さな調整を加えました 戻ってrtrimを使用する substr以上 。 PDO Extensionクラスのモックアップを提供する作業に取り掛かるには、それを行う方法をレイアウトし、それが機能することを確認するためにいくつかの単体テストを実行する必要があります。



    1. MariaDB LOCALTIMESTAMP()の説明

    2. 専用サーバーでのMySQLのチューニングの基本

    3. 動的WHERE句を作成するにはどうすればよいですか?

    4. ORA-01036:C#でクエリを実行する際の変数name/numberが不正です