Tujuan adanya query parameter adalah untuk menghindari SQL injection. Jika menggunakan MySQL, query parameter dapat disisipkan di query dengan tanda ?. Lalu value di query dapat di input melalui fungsi ExecContext() untuk query Insert, Update dan Delete atau fungsi QueryContext() untuk query Get seperti code di bawah ini.
insert into comments (email, comment) value (?,?)
update contact SETname= ?, no_telp = ? where id = ?
deleteFROM contact where id = ?
Jika menggunakan pgx (driver golang PostgreSQL), query parameter disisipkan di query dengan tanda $1, $2 dan seterusnya sesuai urutan parameter.
insert into comments (email, comment) value ($1,$2)
update contact SETname= $1, no_telp = $2where id = $3
deleteFROM contact where id = $1
Prepare Statement
Prepare statement digunakan untuk memastikan query yang di eksekusi berada dalam 1 koneksi database yang sama.
Database Transaction
Database transaction digunakan supaya SQL yang dikirim tidak langsung di commit ke database. Implementasi database transaction semisal jika kita ingin melakukan insert beberapa database, lalu ada 1 data yang gagal di create. Maka kita bisa menggunakan database transaction untuk me-rollback atau membatalkan create seluruh data yang telah di insert ke database. Database transaction di awali dengan inisiasi berikut.
trx, err := db.BeginTx(ctx, nil)if err !=nil {panic(err) // bisa diganti dengan fmt atau log}
Query dapat di commit dengan code berikut.
trx.Commit()
Namun, ada kalanya ingin dilakukan pengecekan untuk menghindari error. Jika error terjadi dapat di atasi dengan code berikut.
if err !=nil { trx.Rollbacck()}
Implementasi Query Parameter, Prepare Statement dan Database Transaction pada Insert Data ke Database
Catatan : untuk query get seluruh data, update dan delete 1 data tidak memerlukan prepare statement ataupun database transaction.