Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengurangkan Pengulangan Kod Apabila Menggunakan Penyata Disediakan PHP SQL?
Pengenalan
Pernyataan yang disediakan menawarkan teknik yang berkuasa untuk mencegah serangan suntikan SQL dan meningkatkan prestasi pertanyaan. Walau bagaimanapun, kaedah tradisional untuk mencipta pernyataan yang disediakan, seperti yang ditunjukkan di bawah:
$sql = 'INSERT INTO tasks(task_name, start_date, completed_date) VALUES(:task_name, :start_date, :completed_date)'; $stmt = $this->pdo->prepare($sql); $stmt->execute([ ':task_name' => $taskName, ':start_date' => $startDate, ':completed_date' => $completedDate, ]);
mengakibatkan jumlah lebihan yang besar dalam menyatakan nama medan. Lebihan ini boleh mengecewakan, terutamanya apabila membuat perubahan atau mengekalkan kod. Artikel ini meneroka tiga pendekatan berbeza yang boleh mengurangkan pengulangan ini dan meningkatkan kebolehbacaan kod pernyataan anda yang disediakan.
PHP mentah
Untuk sisipan asas, satu teknik mudah melibatkan pengabaian fasal medan dalam pertanyaan dan menggunakan ruang letak kedudukan:
$data = [$taskName, $startDate, $completedDate]; $sql = 'INSERT INTO tasks VALUES(null, ?, ?, ?)'; $db->prepare($sql)->execute($data);
Walaupun mudah, pendekatan ini mungkin tidak sesuai dalam semua kes.
Fungsi Pembantu
Kaedah lain ialah mencipta fungsi pembantu khusus untuk mengendalikan sisipan. Fungsi ini boleh menjana pertanyaan secara dinamik berdasarkan nama dan nilai medan yang disediakan:
function prepared_insert($conn, $table, $data) { $keys = array_keys($data); $fields = implode(",", $keys); $placeholders = str_repeat('?,', count($keys) - 1) . '?'; $sql = "INSERT INTO $table ($fields) VALUES ($placeholders)"; $conn->prepare($sql)->execute(array_values($data)); }
Menggunakan fungsi pembantu ini memudahkan proses sisipan:
prepared_insert($db, 'tasks',[ 'task_name' => $taskName, 'start_date' => $startDate, 'completed_date' => $completedDate, ]);
ORM Bayi
Pendekatan paling maju melibatkan pelaksanaan penyelesaian Pengaturcaraan Berorientasikan Objek (OOP), biasanya dirujuk sebagai "ORM bayi". Pendekatan ini mentakrifkan kelas asas dengan kaedah biasa untuk operasi jadual dan kelas khusus untuk jadual individu:
class UserGateway extends BasicTableGateway { protected $table = 'gw_users'; protected $fields = ['email', 'password', 'name', 'birthday']; }
Dengan persediaan ini, sisipan boleh dilakukan tanpa menyatakan nama medan secara eksplisit:
$data = [ 'email' => '[email protected]', 'password' => 123, 'name' => 'Fooster', ]; $userGateway = new UserGateway($pdo); $id = $userGateway->create($data);
Penyelesaian OOP boleh meningkatkan kebolehselenggaraan kod dengan ketara, mengurangkan pengulangan dan meningkatkan keseluruhan pengalaman pembangunan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengurangkan Pengulangan Kod Apabila Menggunakan Penyata Disediakan PHP SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!