{"id":950,"date":"2016-05-16T12:01:51","date_gmt":"2016-05-16T05:01:51","guid":{"rendered":"http:\/\/www.sqlitetutorial.net\/?page_id=950"},"modified":"2024-10-28T22:10:45","modified_gmt":"2024-10-28T15:10:45","slug":"blob","status":"publish","type":"page","link":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/","title":{"rendered":"SQLite PHP: Working with BLOB Data"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you will learn how to manage BLOB data in SQLite database using PHP PDO.<\/p>\n\n\n\n<p class=\"note\">This tutorial begins where the \u201c<a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/delete\/\">Deleting data from a table in PHP<\/a>\u201d tutorial left off.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-blob\/\">BLOB<\/a> stands for a <em>binary large object<\/em>, which is a collection of binary data stored as a value in the SQLite database. <\/p>\n\n\n\n<p>BLOB lets you store documents, images, and multimedia files directly in the SQLite database.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creating a new table<\/h2>\n\n\n\n<p>For demonstration purposes, we&#8217;ll create a new table called <code>documents<\/code>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"SQL (Structured Query Language)\" data-shcb-language-slug=\"sql\"><span><code class=\"hljs language-sql\"><span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> <span class=\"hljs-keyword\">IF<\/span> <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-keyword\">EXISTS<\/span> documents (\n    document_id <span class=\"hljs-built_in\">INTEGER<\/span> PRIMARY <span class=\"hljs-keyword\">KEY<\/span>,\n    mime_type   <span class=\"hljs-built_in\">TEXT<\/span>    <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span>,\n    doc         <span class=\"hljs-built_in\">BLOB<\/span>\n);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">SQL (Structured Query Language)<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">sql<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 1. Open the terminal and navigate to the <code>database<\/code> directory of the project:<\/p>\n\n\n\n<p>Step 2. Connect to the <code>my.db<\/code> database file using the <code>sqlite3<\/code> shell:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">sqlite3<\/span> <span class=\"hljs-selector-tag\">my<\/span><span class=\"hljs-selector-class\">.db<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 3. Execute the <code><a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-create-table\/\">CREATE TABLE<\/a><\/code> statement to create the <code>documents<\/code> table:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">CREATE TABLE <span class=\"hljs-keyword\">IF<\/span> NOT EXISTS documents (\n    document_id INTEGER PRIMARY KEY,\n    mime_type   TEXT    NOT <span class=\"hljs-keyword\">NULL<\/span>,\n    doc         BLOB\n);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In the <code>documents<\/code> table:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>id <\/code>is an <a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-autoincrement\/\">auto-increment<\/a> column.<\/li>\n\n\n\n<li><code>mime_type<\/code> indicates the <code>MIME<\/code> type of the document e.g., <code>application\/pdf<\/code>, <code>image\/png<\/code>. This information is used for rendering the document in web browsers.<\/li>\n\n\n\n<li><code>doc<\/code> stores the document data as <code>BLOB<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>Step 4. Verify if the table <code>documents<\/code> has been created successfully:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-class\">.tables<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">documents  projects   tasks<\/code><\/span><\/pre>\n\n\n<p>The output indicates that he <code>documents<\/code> table has been created successfully.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Writing BLOB into the table<\/h2>\n\n\n\n<p>We&#8217;ll show you how to store a PDF file and an image in the <code>documents<\/code> table.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Steps for inserting BLOB into a table using PHP<\/h3>\n\n\n\n<p>To insert BLOB data into a table, you follow these steps:<\/p>\n\n\n\n<p>Step 1. <a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/connect\/\">Connect to the SQLite database<\/a> by creating an instance of the <code>PDO<\/code> class.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$pdo = <span class=\"hljs-keyword\">new<\/span> \\PDO($dsn);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 2. Read data from a file using the <code>fopen()<\/code> function:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$fh = fopen($pathToFile, <span class=\"hljs-string\">'rb'<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>fopen()<\/code> function returns a file handler.<\/p>\n\n\n\n<p>Step 3. Prepare the <a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/insert\/\">INSERT<\/a> statement for execution by calling the <code>prepare()<\/code> method of the <code>PDO<\/code> object:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$stmt = $pdo-&gt;prepare($sql);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>prepare()<\/code> method returns an instance of the <code>PDOStatement<\/code> class.<\/p>\n\n\n\n<p>Step 4. Bind the file handler to the <code>:data<\/code> placeholder:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$stmt-&gt;bindParam(<span class=\"hljs-string\">':data'<\/span>, $fh, \\PDO::PARAM_LOB);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 5. Execute the <code>INSERT<\/code> statement by calling the <code>execute()<\/code> method of the <code>PDOStatement<\/code> object:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$stmt-&gt;execute();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Inserting BLOB example<\/h3>\n\n\n\n<p>Step 1. Download the <a href=\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2018\/03\/sqlite-sample-database-diagram.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">SQLite Sample Database Diagram in PDF format<\/a> and the <a href=\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2015\/12\/sqlite-tutorial-logo.png\">SQLiteTutorial logo in PNG<\/a> format into your computer.<\/p>\n\n\n\n<p>Step 2. Create a new directory called <code>assets<\/code> within the project directory and copy these files to the <code>assets<\/code> directory.<\/p>\n\n\n\n<p>Step 3. Create a new file <code>insert-document.php<\/code> in the project directory to insert the PDF document and  image into the <code>documents<\/code> table:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span>\n\n<span class=\"hljs-keyword\">require_once<\/span> <span class=\"hljs-string\">'config.php'<\/span>;\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">insert_document<\/span><span class=\"hljs-params\">($pdo, $mimeType, $filename)<\/span> <\/span>{\n\n    $sql = <span class=\"hljs-string\">'INSERT INTO documents(mime_type,doc) \n            VALUES(:mime_type, :doc)'<\/span>;\n    \n    $fh = fopen($filename, <span class=\"hljs-string\">'rb'<\/span>);\n    <span class=\"hljs-keyword\">if<\/span>(!$fh) {\n        <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> \\<span class=\"hljs-keyword\">Exception<\/span>(<span class=\"hljs-string\">'Could not open file: '<\/span> . $filename);\n    }\n    \n    <span class=\"hljs-comment\">\/\/ prepare statement<\/span>\n    $stmt = $pdo-&gt;prepare($sql);\n\n    $stmt-&gt;bindParam(<span class=\"hljs-string\">':mime_type'<\/span>, $mimeType);\n    $stmt-&gt;bindParam(<span class=\"hljs-string\">':doc'<\/span>, $fh, \\PDO::PARAM_LOB);\n    \n    <span class=\"hljs-comment\">\/\/ execute the INSERT statement<\/span>\n    $stmt-&gt;execute();\n\n    <span class=\"hljs-comment\">\/\/ return last inserted id<\/span>\n    <span class=\"hljs-keyword\">return<\/span> $pdo-&gt;lastInsertId();\n}\n\n<span class=\"hljs-comment\">\/\/ connect to database<\/span>\n$dsn = <span class=\"hljs-string\">\"sqlite:$db\"<\/span>;\n\n<span class=\"hljs-keyword\">try<\/span> {\n\n    $pdo = <span class=\"hljs-keyword\">new<\/span> \\PDO($dsn);\n\n     <span class=\"hljs-comment\">\/\/ insert a PNG file into the documents table<\/span>\n    $id = insert_document(\n            $pdo,\n            <span class=\"hljs-string\">'image\/png'<\/span>, \n            <span class=\"hljs-string\">'assets\/sqlite-tutorial-logo.png'<\/span>\n        );\n\n    <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">'Inserted document ID: '<\/span> . $id . <span class=\"hljs-string\">'&lt;br&gt;'<\/span>;\n\n    <span class=\"hljs-comment\">\/\/ insert a PDF file into the documents table<\/span>\n    $id = insert_document(\n            $pdo,\n            <span class=\"hljs-string\">'application\/pdf'<\/span>, \n            <span class=\"hljs-string\">'assets\/sqlite-sample-database-diagram.pdf'<\/span>\n    );\n\n    <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">'Inserted document ID: '<\/span> . $id . <span class=\"hljs-string\">'&lt;br&gt;'<\/span>;\n   \n   \n  \n}  <span class=\"hljs-keyword\">catch<\/span> (\\PDOException $e) {\n    <span class=\"hljs-keyword\">echo<\/span> $e-&gt;getMessage();\n}        <\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Verifying data<\/h3>\n\n\n\n<p>Step 1. Launch the <a href=\"https:\/\/sqlitestudio.pl\/\" target=\"_blank\" rel=\"noreferrer noopener\">SQLiteStudio<\/a>.<\/p>\n\n\n\n<p>Step 2. Open the <code>my.db<\/code> SQLite database file from the SQLiteStudio.<\/p>\n\n\n\n<p>Step 3. Query data from the <code>documents<\/code> table:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"SQL (Structured Query Language)\" data-shcb-language-slug=\"sql\"><span><code class=\"hljs language-sql\"><span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-keyword\">id<\/span>,\n       mime_type,\n       doc\n  <span class=\"hljs-keyword\">FROM<\/span> documents;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">SQL (Structured Query Language)<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">sql<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"616\" height=\"451\" src=\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob.png\" alt=\"SQLite PHP BLOB\" class=\"wp-image-3982\" srcset=\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob.png 616w, https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob-300x220.png 300w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Reading BLOB from the table<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Steps for querying BLOB from SQLite in PHP<\/h3>\n\n\n\n<p>To query BLOB data from the SQLite database, you can use the following steps:<\/p>\n\n\n\n<p>Step 1. <a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/connect\/\">Connect to the SQLite database<\/a> by creating an instance of the <code>PDO<\/code> class.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$pdo = <span class=\"hljs-keyword\">new<\/span> \\PDO($dsn);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 2. Prepare the <a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/insert\/\">INSERT statement<\/a> for execution by calling the <code>prepare()<\/code> method of the <code>PDO<\/code> object:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$stmt = $pdo-&gt;prepare($sql);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>prepare()<\/code> method returns an instance of the <code>PDOStatement<\/code> class.<\/p>\n\n\n\n<p>Step 3. Bind the column with the type <code>\\PDO::PARAM_LOB<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$stmt-&gt;bindColumn(<span class=\"hljs-number\">1<\/span>, $doc, \\PDO::PARAM_LOB);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>PDO::PARAM_LOB<\/code>\u00a0instructs <code>PDO<\/code> to map the <code>BLOB<\/code> data as a stream.<\/p>\n\n\n\n<p>Step 4. Execute the <code>SELECT<\/code> statement by calling the <code>execute()<\/code> method of the <code>PDOStatement<\/code> object:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$stmt-&gt;execute();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Querying BLOB data example<\/h3>\n\n\n\n<p>The following defines a function <code>read_document<\/code> that reads BLOB data from the SQLite database and transfers it to the browser with the correct mime type:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-meta\">&lt;?php<\/span>\n\n<span class=\"hljs-keyword\">require<\/span> <span class=\"hljs-string\">'config.php'<\/span>;\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">read_document<\/span><span class=\"hljs-params\">($pdo, $documentId)<\/span> <\/span>{\n\n    $sql = <span class=\"hljs-string\">'SELECT mime_type, doc FROM documents WHERE document_id = :document_id'<\/span>;\n\n    <span class=\"hljs-comment\">\/\/ initialize params<\/span>\n    $mimeType = <span class=\"hljs-keyword\">null<\/span>;\n    $doc = <span class=\"hljs-keyword\">null<\/span>;\n        \n    <span class=\"hljs-comment\">\/\/ <\/span>\n    $stmt = $pdo-&gt;prepare($sql);\n    \n    <span class=\"hljs-keyword\">if<\/span> ($stmt-&gt;execute(&#91;<span class=\"hljs-string\">\":document_id\"<\/span> =&gt; $documentId])) {\n\n        $stmt-&gt;bindColumn(<span class=\"hljs-number\">1<\/span>, $mimeType);\n        $stmt-&gt;bindColumn(<span class=\"hljs-number\">2<\/span>, $doc, \\PDO::PARAM_LOB);\n\n        <span class=\"hljs-keyword\">if<\/span>($stmt-&gt;fetch(\\PDO::FETCH_BOUND))  {\n            <span class=\"hljs-keyword\">return<\/span> &#91;\n                <span class=\"hljs-string\">\"document_id\"<\/span> =&gt; $documentId,\n                <span class=\"hljs-string\">\"mime_type\"<\/span> =&gt; $mimeType,\n                <span class=\"hljs-string\">\"doc\"<\/span> =&gt; $doc\n            ];\n        }\n    } \n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">null<\/span>;\n}\n\n$dsn = <span class=\"hljs-string\">\"sqlite:$db\"<\/span>;\n\n<span class=\"hljs-comment\">\/\/ get document id from the query string<\/span>\n$documentId = filter_input(INPUT_GET, <span class=\"hljs-string\">'id'<\/span>, FILTER_SANITIZE_NUMBER_INT);\n\n\n<span class=\"hljs-keyword\">try<\/span>{\n    <span class=\"hljs-comment\">\/\/ connect to database<\/span>\n    $pdo = <span class=\"hljs-keyword\">new<\/span> \\PDO($dsn);\n\n    <span class=\"hljs-comment\">\/\/ retrieve a document by id from SQLite database<\/span>\n    $doc = read_document($pdo, $documentId);\n\n        <span class=\"hljs-comment\">\/\/ show the document in the browser<\/span>\n    <span class=\"hljs-keyword\">if<\/span> ($doc != <span class=\"hljs-keyword\">null<\/span>) {\n        header(<span class=\"hljs-string\">\"Content-Type:\"<\/span> . $doc&#91;<span class=\"hljs-string\">'mime_type'<\/span>]);\n        fpassthru($doc&#91;<span class=\"hljs-string\">'doc'<\/span>]);\n    } <span class=\"hljs-keyword\">else<\/span> {\n        <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">'Error loading document '<\/span> . $documentId;\n    }\n} <span class=\"hljs-keyword\">catch<\/span>(\\PDOException $e) {\n    <span class=\"hljs-keyword\">echo<\/span> $e-&gt;getMessage();\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Notice that we use the <code>fpassthru()<\/code> function to pass the <code>BLOB<\/code> data reading from the database to the output.<\/p>\n\n\n\n<p>For example, the following screenshot shows how the <code>document.php<\/code> script returns the PDF file in the web browser:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"731\" height=\"313\" src=\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob-pdf.png\" alt=\"\" class=\"wp-image-3988\" srcset=\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob-pdf.png 731w, https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob-pdf-300x128.png 300w\" sizes=\"auto, (max-width: 731px) 100vw, 731px\" \/><\/figure>\n\n\n\n<p>To test the document id 2, you change the value in the <code>id<\/code> query string as shown in the screenshot below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"503\" height=\"177\" src=\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob-png.png\" alt=\"\" class=\"wp-image-3989\" srcset=\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob-png.png 503w, https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob-png-300x106.png 300w\" sizes=\"auto, (max-width: 503px) 100vw, 503px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <code>BLOB<\/code> data to store large documents directly within SQLite databases.<\/li>\n<\/ul>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Was this tutorial helpful ?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"950\"\n\t\t\t\tdata-post-url=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/\"\n\t\t\t\tdata-post-title=\"SQLite PHP: Working with BLOB Data\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"950\"\n\t\t\t\tdata-post-url=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/\"\n\t\t\t\tdata-post-title=\"SQLite PHP: Working with BLOB Data\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\n\t\t\t<button class=\"btn btn-primary wth-btn-submit\">Send<\/button>\n\t\t\t<button class=\"btn wth-btn-cancel\">Cancel<\/button>\n\t\t\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In this tutorial, you will learn how to manage BLOB data in SQLite database using PHP PDO.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":891,"menu_order":6,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-950","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SQLite PHP: Writing and Reading BLOB Data<\/title>\n<meta name=\"description\" content=\"In this tutorial, you will learn how to write and read BLOB data in SQLite database using PHP PDO.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQLite PHP: Writing and Reading BLOB Data\" \/>\n<meta property=\"og:description\" content=\"In this tutorial, you will learn how to write and read BLOB data in SQLite database using PHP PDO.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/\" \/>\n<meta property=\"og:site_name\" content=\"SQLite Tutorial\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-28T15:10:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/www.sqlitetutorial.net\/#\/schema\/person\/6d69b968cad0102e30d6694ed8dc6427\"},\"headline\":\"SQLite PHP: Working with BLOB Data\",\"datePublished\":\"2016-05-16T05:01:51+00:00\",\"dateModified\":\"2024-10-28T15:10:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/\"},\"wordCount\":541,\"image\":{\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob.png\",\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/\",\"url\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/\",\"name\":\"SQLite PHP: Writing and Reading BLOB Data\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlitetutorial.net\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob.png\",\"datePublished\":\"2016-05-16T05:01:51+00:00\",\"dateModified\":\"2024-10-28T15:10:45+00:00\",\"description\":\"In this tutorial, you will learn how to write and read BLOB data in SQLite database using PHP PDO.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#primaryimage\",\"url\":\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob.png\",\"contentUrl\":\"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob.png\",\"width\":616,\"height\":451,\"caption\":\"SQLite PHP BLOB\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlitetutorial.net\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQLite PHP\",\"item\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"SQLite PHP: Working with BLOB Data\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlitetutorial.net\/#website\",\"url\":\"https:\/\/www.sqlitetutorial.net\/\",\"name\":\"SQLite Tutorial\",\"description\":\"A Step-by-step SQLite Tutorial\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlitetutorial.net\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlitetutorial.net\/#\/schema\/person\/6d69b968cad0102e30d6694ed8dc6427\",\"name\":\"admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SQLite PHP: Writing and Reading BLOB Data","description":"In this tutorial, you will learn how to write and read BLOB data in SQLite database using PHP PDO.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/","og_locale":"en_US","og_type":"article","og_title":"SQLite PHP: Writing and Reading BLOB Data","og_description":"In this tutorial, you will learn how to write and read BLOB data in SQLite database using PHP PDO.","og_url":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/","og_site_name":"SQLite Tutorial","article_modified_time":"2024-10-28T15:10:45+00:00","og_image":[{"url":"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#article","isPartOf":{"@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/"},"author":{"name":"admin","@id":"https:\/\/www.sqlitetutorial.net\/#\/schema\/person\/6d69b968cad0102e30d6694ed8dc6427"},"headline":"SQLite PHP: Working with BLOB Data","datePublished":"2016-05-16T05:01:51+00:00","dateModified":"2024-10-28T15:10:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/"},"wordCount":541,"image":{"@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#primaryimage"},"thumbnailUrl":"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob.png","inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/","url":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/","name":"SQLite PHP: Writing and Reading BLOB Data","isPartOf":{"@id":"https:\/\/www.sqlitetutorial.net\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#primaryimage"},"image":{"@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#primaryimage"},"thumbnailUrl":"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob.png","datePublished":"2016-05-16T05:01:51+00:00","dateModified":"2024-10-28T15:10:45+00:00","description":"In this tutorial, you will learn how to write and read BLOB data in SQLite database using PHP PDO.","breadcrumb":{"@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#primaryimage","url":"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob.png","contentUrl":"https:\/\/www.sqlitetutorial.net\/wp-content\/uploads\/2024\/10\/sqlite-php-blob.png","width":616,"height":451,"caption":"SQLite PHP BLOB"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlitetutorial.net\/"},{"@type":"ListItem","position":2,"name":"SQLite PHP","item":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/"},{"@type":"ListItem","position":3,"name":"SQLite PHP: Working with BLOB Data"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlitetutorial.net\/#website","url":"https:\/\/www.sqlitetutorial.net\/","name":"SQLite Tutorial","description":"A Step-by-step SQLite Tutorial","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlitetutorial.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlitetutorial.net\/#\/schema\/person\/6d69b968cad0102e30d6694ed8dc6427","name":"admin"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlitetutorial.net\/wp-json\/wp\/v2\/pages\/950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlitetutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.sqlitetutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlitetutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlitetutorial.net\/wp-json\/wp\/v2\/comments?post=950"}],"version-history":[{"count":4,"href":"https:\/\/www.sqlitetutorial.net\/wp-json\/wp\/v2\/pages\/950\/revisions"}],"predecessor-version":[{"id":4030,"href":"https:\/\/www.sqlitetutorial.net\/wp-json\/wp\/v2\/pages\/950\/revisions\/4030"}],"up":[{"embeddable":true,"href":"https:\/\/www.sqlitetutorial.net\/wp-json\/wp\/v2\/pages\/891"}],"wp:attachment":[{"href":"https:\/\/www.sqlitetutorial.net\/wp-json\/wp\/v2\/media?parent=950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}