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.
"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( ).
rreeeeIni 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.
Mari kita kendalikan terus objek data besar untuk melihat hasilnya.
rreeeeKami 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.
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>
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!