sql >> Database >  >> RDS >> Mysql

Helperfunctie invoegen/bijwerken met PDO

Ik heb meestal een klas die PDO uitbreidt, maar mijn klas is behoorlijk aangepast. Als ik het heb opgeruimd en getest, zal ik het op een later tijdstip posten. Hier is echter een oplossing voor uw systeem.

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

Dit is misschien niet perfect en zou kunnen worden aangepast. Het houdt er rekening mee dat $dbh is ingesteld met een PDO-verbinding. In afwachting van eventuele kleine syntaxisproblemen die ik heb gemaakt, zou dat moeten werken.

BEWERKEN

Maar echt, ik denk dat ik voor Doctrine ORM (of een andere ORM) zou gaan. Terwijl u het model instelt en alle validatie daar toevoegt, is het zo simpel als:

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

Dat zou de inhoud gemakkelijk moeten vullen. Dit is natuurlijk met een ORM, zoals Doctrine.

GE-UPDATE

Heeft wat kleine aanpassingen gedaan aan de eerste code, zoals het plaatsen van isset terug en gebruik rtrim over substr . Ga aan de slag met het leveren van een mock-up van een PDO Extension-klasse, je moet gewoon de manier om het te doen en een aantal unit-tests doen om te controleren of het werkt.



  1. Prisma, hoe de database te wissen

  2. Een tabel draaien in SQL (d.w.z. kruistabel / kruistabel)

  3. Exporteer SQL-querygegevens naar Excel

  4. Invoegverklaringen genereren uit tekstbestanden voor SQL Server-tabel in SQL Server - SQL Server / TSQL-zelfstudie, deel 106