sql >> Databáze >  >> RDS >> Mysql

Vložit/aktualizovat pomocnou funkci pomocí PDO

Obvykle mám třídu rozšiřující PDO, ale moje třída je docela vlastní. Pokud to vyčistím a otestuji, zveřejním to později. Zde je však řešení pro váš systém.

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

To nemusí být dokonalé a mohlo by to vyžadovat ladění. Bere v úvahu, že $dbh je nastaven pomocí PDO Connection. Dokud jsem udělal nějaké drobné problémy se syntaxí, mělo by to fungovat.

UPRAVIT

Opravdu si však myslím, že bych šel do Doctrine ORM (nebo jiného ORM). Když nastavíte model a přidáte tam všechna ověření, je to stejně jednoduché jako:

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

To by mělo obsah snadno naplnit. To je samozřejmě s ORM, jako je Doctrine.

AKTUALIZOVÁNO

Provedl jsem několik drobných úprav prvního kódu, jako je vložení isset zpět a pomocí rtrim přes substr . Chystám se pracovat na poskytnutí makety třídy PDO Extension, stačí si rozvrhnout způsob, jak to udělat, a udělat nějaké testy jednotek, aby se ujistil, že to funguje.



  1. Oprava „ERROR 1222 (21000):Použité příkazy SELECT mají jiný počet sloupců“ při použití UNION v MySQL

  2. Chyba serveru SQL - HRESULT E_FAIL byla vrácena z volání komponenty COM

  3. generovat dny z období

  4. Hibernate 5 :- org.hibernate.MappingException:Neznámá entita