Saya biasanya memiliki kelas yang memperluas PDO, tetapi kelas saya cukup khusus. Jika saya membersihkannya dan mengujinya, saya akan mempostingnya di lain waktu. Namun, inilah solusi untuk sistem Anda.
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);
Ini mungkin tidak sempurna dan bisa menggunakan tweaking. Ini memperhitungkan bahwa $dbh
diatur dengan Koneksi PDO. Menunggu masalah sintaks kecil yang saya buat, itu akan berhasil.
EDIT
Sungguh, saya pikir saya akan memilih Doctrine ORM (atau ORM lain). Saat Anda menyiapkan model dan menambahkan semua validasi di sana, maka itu sesederhana:
$table = new Table();
$table->fromArray($_POST);
$table->save();
Itu harus mengisi konten dengan mudah. Ini tentu saja dengan ORM, seperti Doctrine.
DIPERBARUI
Melakukan beberapa perubahan kecil pada kode pertama, seperti meletakkan isset
kembali dan menggunakan rtrim
di atas substr
. Akan bekerja untuk menyediakan tiruan kelas Ekstensi PDO hanya harus mengatur tata letak cara melakukannya dan melakukan beberapa pengujian unit untuk memastikannya berfungsi.