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

Mengapa kami menutup hasil di Mysqli

Anda memeriksa apakah koneksi gagal jatuh ke kode yang menggunakan koneksi. Jelas itu tidak akan berhasil karena ini bukan koneksi langsung. Pastikan jika koneksi gagal, kode yang bergantung padanya tidak tercapai. (Perhatikan bahwa saya tidak perlu menganjurkan penggunaan exit atau die. Mereka dapat membuat pengalaman pengguna yang agak buruk. Mereka dapat berguna, tetapi idealnya Anda harus menampilkan pesan yang lebih baik dan meninggalkan hal-hal kesalahan jelek untuk log [kecuali Anda' hanya pengujian atau itu skrip baris perintah]).

Adapun close() (yang sebenarnya merupakan alias gratis()):

free() pada dasarnya membatalkan alokasi semua hal yang dilampirkan ke hasil. Anda perlu memahami bahwa ada dua cara (penyederhanaan, tetapi ikuti saja) untuk mengambil baris:

Buffered - Semuanya diambil dalam sekali jalan. Dengan kata lain, pada saat Anda mulai mengulang-ulang catatan, semuanya sebenarnya sudah ada dalam memori. Mereka disangga . Mereka tidak ditarik dari server setiap kali Anda memanggil fetch() melainkan ditarik dari memori.

Non buffered - mungkin ada buffer kecil, tetapi pada dasarnya setiap kali Anda memanggil fetch(), PHP harus menarik baris baru dari database. Pada awal pengulangan, tidak semuanya tersimpan dalam memori.

Catatan menarik:num_rows() dapat dipanggil pada kueri buffer dengan sangat efisien karena semua baris sudah ditarik (meskipun Anda tidak boleh menarik semua baris hanya untuk menghitungnya -- itulah gunanya COUNT). Kueri yang tidak disangga tidak dapat melakukan num_rows() sampai mereka menarik semua baris. Artinya itu akan menjadi kesalahan, atau pada dasarnya akan mengubahnya menjadi kueri buffer.

Bagaimanapun, kembali ke pertanyaan Anda yang sebenarnya:

free() membebaskan apa pun yang terkait dengan objek hasil. Dalam kasus kueri buffer, ini adalah baris apa pun yang ada di memori. Dalam kasus kueri yang tidak disangga, free() akan melepaskan baris apa pun yang mungkin ada di memori dan kemudian membatalkan permintaan lainnya. Pada dasarnya PHP-nya memberi tahu MySQL, "Hei, Anda tahu semua baris yang saya minta? Berubah pikiran. Anda bisa membatalkan permintaan itu."

Adapun jika Anda harus membebaskan hasil... Nah, setiap kali variabel keluar dari ruang lingkup*, itu akan tetap terjadi. Namun, tidak ada salahnya melakukannya secara eksplisit, dan dalam situasi di mana kueri mungkin menggunakan banyak memori dan kemudian kueri lain setelah itu mungkin menggunakan banyak memori, Anda mungkin ingin mengosongkan set hanya untuk menjaga penggunaan memori tetap rendah .

* Atau mungkin saat permintaan berakhir. Saya tidak ingat apa-apa.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP &MySQL:Bagaimana saya bisa menggunakan SET @rank=0; di $permintaan=

  2. Hasil loop PDO PHP

  3. Periksa apakah ada nilai sebelum memasukkan ke MySQL DB dalam skrip PHP

  4. c3p0 hang dalam menungguTersedia dengan hibernasi

  5. Menampilkan hasil dari query MySQL ke dalam tabel menggunakan PHP