Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Função auxiliar de inserção/atualização usando PDO


Eu costumo ter uma classe estendendo PDO, mas minha classe é bem personalizada. Se eu conseguir limpar e testar, postarei mais tarde. Aqui está uma solução para o seu sistema, no entanto.
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);  

Isso pode não ser perfeito e pode usar ajustes. Leva em conta que $dbh é configurado com uma conexão PDO. Pendente de quaisquer pequenos problemas de sintaxe que fiz, isso deve funcionar.

EDITAR

Realmente, eu acho que eu iria para o Doctrine ORM (ou outro ORM). Conforme você configura o modelo e adiciona toda a validação lá, é tão simples quanto:
$table = new Table();
$table->fromArray($_POST);
$table->save();

Isso deve preencher o conteúdo facilmente. Isso é claro com um ORM, como o Doctrine.

ATUALIZADO

Fiz alguns pequenos ajustes no primeiro código, como colocar isset de volta e usando rtrim sobre substr . Indo trabalhar para fornecer uma maquete de uma classe PDO Extension, basta traçar o caminho para fazê-lo e fazer alguns testes de unidade para garantir que funcione.