Mysql
 sql >> Database >  >> RDS >> Mysql

Inserisci/aggiorna la funzione di supporto tramite PDO

Di solito ho una classe che estende PDO, ma la mia classe è piuttosto personalizzata. Se lo faccio pulire e testare lo posterò in un secondo momento. Tuttavia, ecco una soluzione per il tuo sistema.

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);  

Questo potrebbe non essere perfetto e potrebbe essere necessario un ritocco. Tiene conto che $dbh è configurato con una connessione PDO. In attesa di eventuali problemi di sintassi minori che ho riscontrato, dovrebbe funzionare.

MODIFICA

In realtà, penso che sceglierei Doctrine ORM (o un altro ORM). Mentre imposti il ​​modello e aggiungi lì tutta la convalida, è semplice come:

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

Ciò dovrebbe popolare facilmente i contenuti. Questo è ovviamente con un ORM, come Doctrine.

AGGIORNATO

Ha apportato alcune piccole modifiche al primo codice, come inserire isset indietro e utilizzando rtrim su substr . Per lavorare per fornire un modello di una classe di estensione PDO, devo solo definire il modo per farlo e fare alcuni test unitari per assicurarti che funzioni.