Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wstaw/aktualizuj funkcję pomocniczą za pomocą PDO

Zwykle mam klasę rozszerzającą PDO, ale moja klasa jest dość niestandardowa. Jeśli to wyczyszczę i przetestuję, wyślę to później. Oto rozwiązanie dla twojego systemu.

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 może nie być idealne i może wymagać ulepszenia. Bierze pod uwagę, że $dbh jest skonfigurowany z połączeniem PDO. W oczekiwaniu na wszelkie drobne problemy ze składnią, które zrobiłem, powinny działać.

EDYTUJ

Naprawdę jednak myślę, że wybrałbym Doctrine ORM (albo inny ORM). Gdy konfigurujesz model i dodajesz tam całą walidację, jest to tak proste, jak:

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

To powinno łatwo wypełnić zawartość. Dzieje się tak oczywiście z ORM, takim jak Doctrine.

ZAKTUALIZOWANE

Wprowadzono kilka drobnych poprawek w pierwszym kodzie, takich jak umieszczenie isset z powrotem i używając rtrim ponad substr . Zamierzam pracować nad dostarczeniem makiety klasy PDO Extension, po prostu trzeba ułożyć odpowiedni układ i wykonać kilka testów jednostkowych, aby upewnić się, że działa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oblicz różnicę czasu między dwoma rzędami

  2. PHP CRUD Twórz, edytuj, aktualizuj i usuwaj posty za pomocą bazy danych MySQL

  3. Zapobiegaj atakom typu SQL injection w programie Java

  4. Klauzula LIMIT MySQL równoważna dla serwera SQL SERVER

  5. Korzystanie z automatyzacji w celu przyspieszenia testów wersji w klastrze Galera z ClusterControl