Jadual Kandungan
Mengelakkan Pengulangan Kod dengan Penyata PHP SQL Disediakan
Rumah pangkalan data tutorial mysql Bagaimanakah Saya Boleh Mengurangkan Pengulangan Kod Apabila Menggunakan Penyata Disediakan PHP SQL?

Bagaimanakah Saya Boleh Mengurangkan Pengulangan Kod Apabila Menggunakan Penyata Disediakan PHP SQL?

Jan 01, 2025 am 02:54 AM

How Can I Reduce Code Repetition When Using PHP SQL Prepared Statements?

Mengelakkan Pengulangan Kod dengan Penyata PHP SQL Disediakan

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,
    ]);
Salin selepas log masuk

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);
Salin selepas log masuk

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));
}
Salin selepas log masuk

Menggunakan fungsi pembantu ini memudahkan proses sisipan:

prepared_insert($db, 'tasks',[
    'task_name' => $taskName,
    'start_date' => $startDate,
    'completed_date' => $completedDate,
]);
Salin selepas log masuk

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'];
}
Salin selepas log masuk

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);
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kurangkan penggunaan memori MySQL di Docker Kurangkan penggunaan memori MySQL di Docker Mar 04, 2025 pm 03:52 PM

Kurangkan penggunaan memori MySQL di Docker

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Mar 19, 2025 pm 03:51 PM

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table?

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Mar 04, 2025 pm 04:01 PM

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama

Apa itu SQLite? Gambaran Keseluruhan Komprehensif Apa itu SQLite? Gambaran Keseluruhan Komprehensif Mar 04, 2025 pm 03:55 PM

Apa itu SQLite? Gambaran Keseluruhan Komprehensif

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Mar 04, 2025 pm 03:54 PM

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin)

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Mar 04, 2025 pm 03:49 PM

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)? Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)? Mar 18, 2025 pm 12:00 PM

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)?

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL? Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL? Mar 18, 2025 pm 12:01 PM

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL?

See all articles