Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hilfsfunktion einfügen/aktualisieren mit PDO

Normalerweise habe ich eine Klasse, die PDO erweitert, aber meine Klasse ist ziemlich benutzerdefiniert. Wenn ich es gereinigt und getestet habe, werde ich es zu einem späteren Zeitpunkt posten. Hier ist jedoch eine Lösung für Ihr System.

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

Dies ist möglicherweise nicht perfekt und könnte optimiert werden. Dabei wird $dbh berücksichtigt wird mit einer PDO-Verbindung eingerichtet. Bis auf kleinere Syntaxprobleme, die ich gemacht habe, sollte das funktionieren.

BEARBEITEN

Aber wirklich, ich denke, ich würde mich für Doctrine ORM (oder ein anderes ORM) entscheiden. Wenn Sie das Modell einrichten und dort die gesamte Validierung hinzufügen, ist es so einfach wie:

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

Das sollte den Inhalt leicht füllen. Dies ist natürlich mit einem ORM, wie Doctrine.

AKTUALISIERT

Am ersten Code wurden einige kleinere Änderungen vorgenommen, z. B. isset eingefügt zurück und mit rtrim über substr . Um an der Bereitstellung eines Modells einer PDO-Erweiterungsklasse zu arbeiten, müssen Sie nur die Vorgehensweise festlegen und einige Komponententests durchführen, um sicherzustellen, dass sie funktioniert.