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

Tiba-tiba mencapai batas memori PHP dengan satu permintaan PDO?

Ding ding ding!

Saat menghubungkan ke MySQL, PHP suka menggunakan kueri buffer . Ini benar terlepas dari metode apa yang Anda gunakan untuk terhubung. Saat menggunakan kueri yang di-buffer, seluruh hasil akan segera diambil alih-alih diambil saat Anda bertanya. Ini biasanya bagus untuk performa, karena perjalanan pulang pergi lebih sedikit.

Tapi seperti semua yang ada di PHP, ada gotcha. Seperti yang tertera di halaman buffering:

Anda menggunakan PHP 5.3, yang berarti kemungkinan besar Anda menggunakan mysqlnd.

Anda akan ingin mematikan kueri buffer di sini. Ini dilakukan secara berbeda di setiap antarmuka PHP ke MySQL:

  • Untuk PDO, Anda harus menyetel PDO::MYSQL_ATTR_USE_BUFFERED_QUERY atribut ke false .
  • Untuk mysqli, Anda harus meneruskan MYSQLI_USE_RESULT konstan ke query metode.
  • Untuk mysql, Anda perlu memanggil mysql_unbuffered_query bukannya mysql_query .

Detail lengkap dan contoh ada di halaman.

Kueri tanpa buffer yang besar dan gemuk!

Anda harus tutup pegangan pernyataan dengan benar dan bebaskan kumpulan hasil sebelum mengeluarkan kueri lain:

  • Dalam PDO, ini berarti memanggil closeCursor pada pegangan pernyataan.
  • Di mysqli, ini berarti memanggil free_result pada pegangan pernyataan atau free pada pegangan hasil, tergantung pada apa yang Anda kerjakan.
  • Di mysql, ini berarti memanggil mysql_free_result

Kegagalan untuk melakukan ini akan mengakibatkan kesalahan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya harus mengindeks kueri dengan dua kondisi rentang?

  2. Pernyataan SELECT yang digunakan memiliki jumlah kolom yang berbeda (REDUX!!)

  3. LINQ ke SQL beberapa tabel kiri luar bergabung

  4. Sesi MySQL Workbench tidak melihat pembaruan ke database

  5. Di mana saya harus menyimpan kredensial database saya?