sql >> Databasteknik >  >> RDS >> Mysql

Infoga/uppdatera hjälpfunktion med PDO

Jag har vanligtvis en klass som utökar PDO, men min klass är ganska anpassad. Om jag får den städad och testad kommer jag att lägga upp den vid ett senare tillfälle. Här är dock en lösning på ditt 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);  

Detta kanske inte är perfekt och kan behöva tweaking. Den tar hänsyn till att $dbh är inställd med en PDO-anslutning. I avvaktan på några mindre syntaxproblem som jag gjorde, borde det fungera.

REDIGERA

Men egentligen tror jag att jag skulle gå för Doctrin ORM (eller en annan ORM). När du ställer in modellen och lägger till all validering där, är det så enkelt som:

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

Det borde fylla innehållet lätt. Detta är naturligtvis med en ORM, som Doctrine.

UPPDATERAD

Gjorde några mindre justeringar av den första koden, som att sätta isset tillbaka och använda rtrim över substr . Ska jobba på att tillhandahålla en modell av en PDO-tilläggsklass måste bara lägga upp sättet att göra det och göra några enhetstester för att se till att det fungerar.



  1. Uppdatera en e-postprofil för databas (SSMS)

  2. Hur man undviker att aktivitetsövervakning skadar din SQL-servers prestanda

  3. SQL Server-fråga för att hitta alla behörigheter/åtkomster för alla användare i en databas

  4. Hur TIMESTAMPDIFF() fungerar i MariaDB