Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengelakkan Pengulangan Kod Apabila Menggunakan Penyata PHP SQL Disediakan?

Bagaimana untuk Mengelakkan Pengulangan Kod Apabila Menggunakan Penyata PHP SQL Disediakan?

Linda Hamilton
Lepaskan: 2024-12-29 03:22:10
asal
413 orang telah melayarinya

How to Avoid Code Repetition When Using PHP SQL Prepared Statements?

Cara Mengelakkan Pengulangan Kod dengan PHP SQL Prepared Statements

Pernyataan yang disediakan adalah penting untuk mencegah serangan suntikan SQL. Walau bagaimanapun, ia boleh menyebabkan lebihan kod yang berlebihan, terutamanya dalam kes dengan banyak lajur. Untuk menangani isu ini, terdapat beberapa pendekatan untuk meminimumkan pengulangan.

1. PHP mentah

Pendekatan ini menggunakan ruang letak kedudukan dan mengetepikan klausa nama medan dalam pertanyaan, bergantung pada nilai lalai untuk medan yang tiada. Contohnya:

$data = [$taskName, $startDate, $completedDate];
$sql = 'INSERT INTO tasks VALUES(null, ?, ?, ?)';
$db->prepare($sql)->execute($data);
Salin selepas log masuk

2. Fungsi Helper

Seseorang boleh mencipta fungsi helper yang menerima nama jadual dan tatasusunan data dengan nama medan sebagai kunci dan nilai sebagai nilai. Fungsi harus menggunakan fungsi pembantu untuk melepaskan nama medan dengan betul untuk pencegahan suntikan SQL:

function prepared_insert($conn, $table, $data) {
    $keys = array_map('escape_mysql_identifier', array_keys($data));
    $fields = implode(",", $keys);
    $table = escape_mysql_identifier($table);
    $placeholders = str_repeat('?,', count($keys) - 1) . '?';
    $sql = "INSERT INTO $table ($fields) VALUES ($placeholders)";
    $conn->prepare($sql)->execute(array_values($data));
}

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

3. Baby ORM

Pendekatan ini menggunakan pengaturcaraan berorientasikan objek untuk mengurangkan lagi pengulangan. Kelas prototaip dicipta dengan kaedah biasa untuk semua jadual, dan kelas jadual tertentu ditakrifkan dengan nama jadual dan senarai lajur. Kod sisipan menjadi:

$data = [
    'email' => 'email',
    'password' => 123,
    'name' => 'Fooster',
];

$userGateway = new UserGateway($pdo);

$id = $userGateway->create($data);
echo "Create: $id\n";
Salin selepas log masuk

Kelas prototaip:

class BasicTableGateway {
    public function create($data): int
    {
        $fields = $this->makeFieldList($data);
        $placeholders = str_repeat('?,', count($data) - 1) . '?';

        $sql = "INSERT INTO `$this->table` ($fields) VALUES ($placeholders)";
        $this->sql($sql,array_values($data));

        return $this->db->lastInsertId();
    }
}
Salin selepas log masuk

Kelas jadual tertentu:

class UserGateway extends BasicTableGateway {
    protected $table = 'gw_users';
    protected $fields = ['email', 'password', 'name', 'birthday'];
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Pengulangan Kod Apabila Menggunakan Penyata PHP SQL Disediakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan