Rumah > pangkalan data > tutorial mysql > Bagaimana PDO mengendalikan objek data besar dalam MySQL

Bagaimana PDO mengendalikan objek data besar dalam MySQL

王林
Lepaskan: 2023-06-02 18:01:30
ke hadapan
1528 orang telah melayarinya

PDO mengendalikan objek data besar

Secara amnya dalam pangkalan data, kami hanya menyimpan data jenis int dan varchar Pertama, kerana pangkalan data hubungan moden mempunyai banyak pengoptimuman untuk kandungan ini Kedua, kebanyakan indeks tidak boleh digunakan pada medan dengan terlalu banyak kandungan Contohnya, medan jenis teks tidak sesuai untuk membuat indeks. Oleh itu, apabila kami menggunakan pangkalan data, kami jarang menyimpan medan kandungan yang besar dalam pangkalan data. Walau bagaimanapun, MySQL sebenarnya menyediakan storan jenis ini untuk kami, tetapi kami biasanya tidak banyak menggunakannya.

Apakah itu Objek Data Besar

"Besar" biasanya bermaksud "kira-kira 4kb atau lebih", walaupun sesetengah pangkalan data boleh mengendalikan sehingga 32kb data dengan mudah. Objek besar mungkin berbentuk teks atau binari, dan kita boleh membuat PDO menggunakan jenis data yang besar dengan menggunakan kod jenis PDO::PARAM_LOB dalam panggilan PDOStatement::bindParam() atau PDOStatement::bindColumn(). PDO::PARAM_LOB memberitahu PDO untuk memetakan data sebagai strim supaya ia boleh dimanipulasi menggunakan PHP Streams API.

Dalam MySQL, menetapkan jenis medan kepada gumpalan bermakna medan itu dalam format objek besar. Apabila menggunakan bindParam() atau bindColumn(), jika parameter medan yang ditentukan adalah jenis PDO::PARAM_LOB, anda boleh terus mendapatkan kandungan objek ini dalam bentuk pemegang dan terus beroperasi padanya sama seperti fopen( ).

rreeee

Ini ialah jadual data untuk ujian kami Medan lampiran ditetapkan kepada jenis longblob, iaitu jenis gumpalan yang lebih besar, supaya kami boleh menyimpan lebih banyak maklumat. Lagipun, gambar atau fail hari ini boleh bermula dengan mudah daripada beberapa MB atau berpuluh-puluh MB Kami terus menggunakan jenis gumpalan terbesar untuk ujian mudah. Saiz tinyblob ialah 255 bait, saiz jenis blob ialah 65k, mediumblob ialah 16M dan longblob ialah 4G.

Apakah yang akan berlaku jika kami mengendalikan objek data besar secara langsung?

Mari kita kendalikan terus objek data besar untuk melihat hasilnya.

rreeee

Kami terus menyimpan fail yang dibuka oleh fopen() ke dalam medan gumpalan tanpa mengikat medan itu terlebih dahulu. Ia boleh diperhatikan daripada pangkalan data bahawa medan berkaitan gumpalan hanya menyimpan rentetan dalam bentuk "ID Sumber #6". Dalam erti kata lain, tanpa sebarang pemprosesan, pemegang $fp dipaksa kepada jenis rentetan, dan hasil daripada jenis pemegang yang dipaksa ialah hanya ID sumber akan dikeluarkan, dan gumpalan hanya akan sama dengan jenis aksara medan. Rentetan ini baru sahaja direkodkan.

Postur yang betul

Seterusnya mari kita lihat postur yang betul, iaitu memasukkan data melalui bindParam() dan membaca data melalui bindColumn().

<code>CREATE TABLE `zy_blob` (<br>  `id` int(11) NOT NULL AUTO_INCREMENT,<br>  `attach` longblob,<br>  PRIMARY KEY (`id`)<br>) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;<br></code>
Salin selepas log masuk

Pertama, selepas kami mengikat data melalui bindParam() dan menentukan jenis PDO::PARAM_LOB, kami memasukkan kandungan binari pemegang fail ke dalam pangkalan data seperti biasa. Seterusnya, kami menggunakan bindColumn() dan juga menentukan jenis PDO::PARAM_LOB untuk mendapatkan data yang ditanya. Cetak maklumat medan yang ditanya secara langsung dan anda boleh melihat bahawa ia adalah kandungan jenis binari. Akhir sekali, kami menyimpan kandungan binari ini ke fail dengan nama lain.

Atas ialah kandungan terperinci Bagaimana PDO mengendalikan objek data besar dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan