Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pola koneksi database tunggal PHP

Menggunakan singletons di PHP dianggap praktik yang buruk. Dari pengalaman saya, masalah yang paling bermasalah dengan mereka adalah tes unit. Sulit untuk memastikan bahwa dua tes independen saat menguji lajang.

Saya akan mendelegasikan tanggung jawab untuk batasan "hanya satu contoh yang harus ada" ke kode yang membuat objek Db.

Juga bagi saya sepertinya ada kesalahpahaman dalam cara kerja Lajang di PHP berbeda dengan bahasa lain:Jika Anda memiliki 10.000 permintaan bersamaan misalnya, maka setiap permintaan berjalan dalam proses atau utas PHP yang terpisah, yang berarti mereka semua akan memiliki sendiri contoh "lajang", tidak ada pembagian objek ini untuk lebih dari satu permintaan (saat menjalankan PHP dalam skenario backend web umum)

Tidak ada "pengumpulan koneksi" di PHP, tetapi Anda dapat menggunakan mysqli koneksi persisten untuk mysql. Ini dapat dicapai dengan melewatkan p: di depan nama host saat membuat mysqli. Ini mungkin membantu di sini, tetapi tangani dengan hati-hati (artinya baca dokumentasi terlebih dahulu )

Namun, hanya untuk teori, singleton di PHP harus menyadari fakta bahwa seseorang dapat menggunakan clone . Artinya dalam kasus Anda adalah mungkin untuk melakukan itu:

$db = DB::getInstance();
$db2 = clone $db; 

Untuk menghindarinya, Anda dapat mengimplementasikan __clone() caranya seperti ini:

public function __clone() {
    throw new Exception("Can't clone a singleton");
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Grup MySQL Dengan fungsionalitas dalam versi yang berbeda

  2. WHERE datetime lebih lama dari beberapa waktu (mis. 15 menit)

  3. Cara menggabungkan dua tabel dengan ssp.class.php

  4. Query Dinamis di MySQL

  5. ALTER table - menambahkan AUTOINCREMENT di MySQL