sql >> Base de Datos >  >> RDS >> Mysql

Función auxiliar de inserción/actualización mediante PDO

Por lo general, tengo una PDO de extensión de clase, pero mi clase es bastante personalizada. Si lo limpio y lo pruebo, lo publicaré más adelante. Sin embargo, aquí hay una solución para su sistema.

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

Esto puede no ser perfecto y podría necesitar ajustes. Tiene en cuenta que $dbh está configurado con una conexión PDO. En espera de cualquier problema menor de sintaxis que hice, eso debería funcionar.

EDITAR

Sin embargo, creo que optaría por Doctrine ORM (u otro ORM). A medida que configura el modelo y agrega toda la validación allí, es tan simple como:

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

Eso debería llenar los contenidos fácilmente. Esto es, por supuesto, con un ORM, como Doctrine.

ACTUALIZADO

Hice algunos ajustes menores al primer código, como poner isset atrás y usando rtrim sobre substr . Voy a trabajar para proporcionar una maqueta de una clase de extensión de PDO, solo tengo que diseñar la forma de hacerlo y hacer algunas pruebas unitarias para asegurarme de que funcione.