PDO如何操作MySQL中的大數據對象
PDO操作大數據物件
一般在資料庫中,我們保存的都只是int 、 varchar 類型的數據,一是因為現代的關係型資料庫對於這些內容會有很多的最佳化,二是大部分的索引也無法施加在內容過多的欄位上,比如說text 類型的欄位就很不適合用來建立索引。所以,我們在使用資料庫時,很少會儲存很大的內容欄位給資料庫。但是,MySQL 其實也為我們準備了這種類型的存儲,只是我們平常用得不多而已。
什麼是大數據物件
“大”通常意味著“大約4kb 或以上”,儘管某些資料庫在資料達到“大”之前可以輕鬆地處理多達32kb 的數據。大物件本質上可能是文字或二進位形式的,我們在 PDOStatement::bindParam() 或 PDOStatement::bindColumn() 呼叫中使用 PDO::PARAM_LOB 類型碼可以讓 PDO 使用大資料類型。 PDO::PARAM_LOB 告訴 PDO 作為流來映射數據,以便能使用 PHP Streams API 來操作。
在 MySQL 中,將欄位類型設為 blob 就表示該欄位為大物件格式。而在 bindParam() 或 bindColumn() 時,指定欄位的參數為 PDO::PARAM_LOB 類型,就可以直接以句柄形式取得這個物件裡面的內容,就像 fopen() 一樣地繼續對它進行操作。
<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>
這是我們測試用的一個資料表,將 attach 欄位設定為了 longblob 類型,也就是比較大的 blob 類型,這樣我們就可以儲存更多地資訊。畢竟現在的圖片或文件隨便就是輕鬆地幾m或幾十m起步的,我們直接使用最大的 blob 類型來進行簡單地測試。 tinyblob 的大小為 255 位元組,blob 類型的大小為 65k ,mediumblob 為 16M ,longblob 為 4G 。
直接操作大數據物件會怎麼樣?
我們先來簡單地直接操作大數據對象,看看是什麼樣的結果。
<code>$stmt = $pdo->prepare("insert into zy_blob (attach) values (?)");<br>$fp = fopen('4960364865db53dcb33bcf.rar', 'rb');<br>$stmt->execute([$fp]);<br><br>$stmt = $pdo->query("select attach from zy_blob where id=1");<br>$file = $stmt->fetch(PDO::FETCH_ASSOC);<br>print_r($file); <br>// Array<br>// (<br>// [attach] => Resource id #6<br>// )<br></code>
我們沒有先綁定字段,就直接將 fopen() 開啟的檔案儲存到 blob 字段中。從資料庫中可以觀察到,blob 相關的欄位只是保存了形如 "Resource id #6" 的字串。也就是說,在不做任何處理的情況下,$fp 句柄被強制轉換成了字串類型,而句柄類型被強轉的結果就是只會輸出一個資源ID,而blob 也只是和字元類型的字段一樣記錄了這個字串而已。
正確的姿勢
接下來我們來看看正確的姿勢,也就是透過 bindParam() 來插入數據,透過 bindColumn() 來讀取資料。
<code>$stmt = $pdo->prepare("insert into zy_blob (attach) values (?)");<br><br>$fp = fopen('4960364865db53dcb33bcf.rar', 'rb');<br><br>$stmt->bindParam(1, $fp, PDO::PARAM_LOB); // 绑定参数类型为 PDO::PARAM_LOB<br>$stmt->execute();<br><br>$stmt = $pdo->prepare("select attach from zy_blob where id=2");<br>// // $file = $stmt->fetch(PDO::FETCH_ASSOC);<br>// // print_r($file); // 空的<br>$stmt->execute();<br>$stmt->bindColumn(1, $file, PDO::PARAM_LOB); // 绑定一列到一个 PHP 变量<br>$stmt->fetch(PDO::FETCH_BOUND); // 指定获取方式,返回 TRUE 且将结果集中的列值分配给通过 PDOStatement::bindParam() 或 PDOStatement::bindColumn() 方法绑定的 PHP 变量<br>print_r($file); // 二进制乱码内容<br>$fp = fopen('a.rar', 'wb');<br>fwrite($fp, $file);</code>
首先,我們透過 bindParam() 綁定數據,並指定 PDO::PARAM_LOB 類型之後,就正常地向資料庫插入了檔案的句柄二進位內容。接著,我們使用 bindColumn() 並且也指定 PDO::PARAM_LOB 類型來獲得查詢出來的資料。直接列印查詢出來的欄位訊息,就可以看到它是二進位的類型內容。最後,我們將這個二進位內容保存成另一個名稱的檔案。
以上是PDO如何操作MySQL中的大數據對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

在使用Thelia開發電商網站時,我遇到了一個棘手的問題:MySQL模式設置不當,導致某些功能無法正常運行。經過一番探索,我找到了一個名為TheliaMySQLModesChecker的模塊,它能夠自動修復Thelia所需的MySQL模式,徹底解決了我的困擾。
