Transaksi PHP MySQL

Transaksi PHP MySQL

Transaksi PHP MySQL

Rangkuman : dalam tutorial ini, Anda akan belajar bagaimana menangani transaksi MySQL di PHP untuk memastikan integritas data dari database. Transaksi php mysql adalah suatu keadaan dimana jika sebuah table lainnya gagal di lakukan maka transaksi sebelumnya akan dibatalkan begitu juga sebaliknya jika berhasil maka transaksi komit dilakukan inilah yang dimaksud integritas database menjadi terjaga, fungsi ini umumnya dilakukan untuk sebuah transaksi pada lebih dari satu tabel

Transaksi PHP MySQL

Sebuah transaksi adalah satu set pernyataan SQL saling bergantung yang perlu mengeksekusi dalam semua-atau-tidak ada modus. Transaksi berhasil jika semua pernyataan SQL berhasil dijalankan. Kegagalan pernyataan apa pun akan memicu sistem untuk melakukan rollback ke keadaan semula untuk menghindari ketidakkonsistenan data.

Contoh klasik dari transaksi tersebut adalah transaksi transfer uang dari satu rekening bank ke rekening bank lainnya. Ini membutuhkan tiga langkah:

  • Periksa saldo rekening yang ditransfer untuk melihat apakah jumlahnya cukup untuk transfer.
  • Jika jumlahnya cukup, kurangi jumlah tersebut dari saldo akun yang ditransfer.
  • Tambahkan jumlah transfer ke saldo akun penerima.

Jika terjadi kesalahan pada langkah kedua, langkah ketiga tidak boleh dilanjutkan. Selain itu, jika terjadi kesalahan pada langkah ketiga, langkah kedua harus dibalik. Jumlah kedua rekening bank utuh jika terjadi kegagalan atau disesuaikan dengan benar jika transaksi berhasil diselesaikan.

Transaksi MySQL dalam PHP

Saat Anda menggunakan PDO untuk membuat sambungan ke database yang mendukung transaksi, mode komit otomatis ditetapkan. Ini berarti bahwa setiap kueri yang Anda keluarkan dibungkus di dalam transaksi implisit.

Perhatikan bahwa tidak semua mesin penyimpanan dalam transaksi dukungan MySQL misalnya, MyISAM tidak mendukung transaksi tersebut, namun, InnoDB mendukungnya.

Untuk menangani transaksi MySQL di PHP, Anda menggunakan langkah-langkah berikut:

  1. Mulailah transaksi dengan memanggil beginTransaction()metode objek PDO.
  2. Tempatkan pernyataan SQL dan  commit()pemanggilan metode dalam satu tryblok.
  3. Rollback transaksi di catchblok dengan memanggil rollBack()metode objek PDO.
Baca Juga  Fungsi MySQL PERCENT_RANK

Contoh transaksi PHP MySQL

Kami akan membuat tabel bernama accountsuntuk menunjukkan transfer uang antara dua rekening bank.

Pertama, jalankan pernyataan berikut untuk membuat accountstabel:

CREATE TABLE accounts (

id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR (50) NOT NULL,

amount DECIMAL (19, 4) NOT NULL

);

Bahasa kode: SQL (Structured Query Language) ( sql )

Kedua, masukkan dua baris ke dalam accountstabel:

INSERT INTO accounts(name,amount)

VALUES(‘John’,25000),

(‘Mary’,95000);

Bahasa kode: SQL (Structured Query Language) ( sql )

Ketiga, permintaan tersebut accountstabel:

SELECT *

FROM accounts;

Bahasa kode: PHP ( php )

Contoh Transaksi PHP MySQL

Mari kita lihat TransactionDemokelas berikut :

<?php

/**

* PHP MySQL Transaction Demo

*/

class TransactionDemo {

const DB_HOST = ‘localhost’;

const DB_NAME = ‘classicmodels’;

const DB_USER = ‘root’;

const DB_PASSWORD = ”;

/**

* Open the database connection

*/

public function __construct() {

// open database connection

$conStr = sprintf(“mysql:host=%s;dbname=%s”, self::DB_HOST, self::DB_NAME);

try {

$this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD);

} catch (PDOException $e) {

die($e->getMessage());

}

}

/**

* PDO instance

* @var PDO

*/

private $pdo = null;

/**

* Transfer money between two accounts

* @param int $from

* @param int $to

* @param float $amount

* @return true on success or false on failure.

*/

public function transfer($from, $to, $amount) {

try {

$this->pdo->beginTransaction();

// get available amount of the transferer account

$sql = ‘SELECT amount FROM accounts WHERE id=:from’;

$stmt = $this->pdo->prepare($sql);

$stmt->execute(array(“:from” => $from));

$availableAmount = (int) $stmt->fetchColumn();

$stmt->closeCursor();

if ($availableAmount < $amount) {

echo ‘Insufficient amount to transfer’;

return false;

}

// deduct from the transferred account

$sql_update_from = ‘UPDATE accounts

SET amount = amount – :amount

WHERE id = :from’;

$stmt = $this->pdo->prepare($sql_update_from);

$stmt->execute(array(“:from” => $from, “:amount” => $amount));

$stmt->closeCursor();

// add to the receiving account

$sql_update_to = ‘UPDATE accounts

Baca Juga  FIND DAN REPLACE DI WORD 2010

SET amount = amount + :amount

WHERE id = :to’;

$stmt = $this->pdo->prepare($sql_update_to);

$stmt->execute(array(“:to” => $to, “:amount” => $amount));

// commit the transaction

$this->pdo->commit();

echo ‘The amount has been transferred successfully’;

return true;

} catch (PDOException $e) {

$this->pdo->rollBack();

die($e->getMessage());

}

}

/**

* close the database connection

*/

public function __destruct() {

// close the database connection

$this->pdo = null;

}

}

// test the transfer method

$obj = new TransactionDemo();

// transfer 30K from from account 1 to 2

$obj->transfer(1, 2, 30000);

// transfer 5K from from account 1 to 2

$obj->transfer(1, 2, 5000);

Bahasa kode: PHP ( php )

Kami membuka koneksi database dalam __construct()metode dan menutupnya dalam __destruct()metode. Dalam transfer()metode:

  • Pertama, kami menanyakan¬†amountakun yang ditransfer dan membandingkannya dengan jumlah transfer untuk memeriksa apakah saldo akun yang ditransfer mencukupi.
  • Kedua, jika jumlahnya mencukupi, kami mengurangi jumlah transfer dari akun yang ditransfer dan menambahkannya ke akun penerima.
  • Ketiga, kami melakukan transaksi dengan memanggil¬†commit()metode tersebut.¬†Jika terjadi kesalahan, kami memanggil¬†rollBack()metode di¬†catchblok untuk mengembalikan transaksi.

Mari kita uji transfer()metodenya.

// transfer 30K from from account 1 to 2

$obj->transfer(1, 2, 30000);

Bahasa kode: PHP ( php )

Kami mentransfer 30 ribu dari akun John ke akun Mary. Kami mendapat pesan berikut:

Insufficient amount to transfer

Mari lakukan transfer lain:

// transfer 5K from from account 1 to 2

$obj->transfer(1, 2, 5000);

Bahasa kode: PHP ( php )

Skrip mengembalikan pesan berikut:

The amount has been transferred successfully.

Kami telah berhasil mentransfer uang antara dua rekening bank.

Anda dapat mengunduh kode sumber melalui tautan berikut:

Unduh Kode Sumber Transaksi PHP MySQL

Dalam tutorial ini, kami telah menunjukkan kepada Anda langkah demi langkah bagaimana menangani transaksi MySQL di PHP untuk memastikan integritas data.

Baca Juga  Contoh Halaman Login Dengan bootstrap

 

Tinggalkan Komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Need Help? Chat with us