{"id":960,"date":"2016-05-17T11:20:33","date_gmt":"2016-05-17T04:20:33","guid":{"rendered":"http:\/\/www.sqlitetutorial.net\/?page_id=960"},"modified":"2024-10-28T22:17:43","modified_gmt":"2024-10-28T15:17:43","slug":"transaction","status":"publish","type":"page","link":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/","title":{"rendered":"SQLite PHP: Transaction"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you will learn how to manage transactions in SQLite databases from PHP using PDO to ensure data integrity.<\/p>\n\n\n\n<p class=\"note\">This tutorial begins where the \u201c<a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/blob\/\">Working with BLOB data in PHP<\/a>\u201d tutorial left off.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Managing transactions<\/h2>\n\n\n\n<p>When you update data in an SQLite database, PHP automatically commits the changes to the database. <\/p>\n\n\n\n<p>To control when the PHP commits changes to the database, you can wrap the database operations within a <em>transaction<\/em>.<\/p>\n\n\n\n<p>Step 1. Call the <code>beginTransaction()<\/code> method of the <code>PDO<\/code> object to start a <a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-transaction\/\">transaction<\/a>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$pdo-&gt;beginTransaction();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><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. Perform database operations such as <a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-insert\/\">insert<\/a>, <a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-update\/\">update<\/a>, and <a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-delete\/\">delete<\/a>.<\/p>\n\n\n\n<p>Step 3. Apply changes permanently to the database by calling the <code>commit()<\/code> method of the PDO object:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$pdo-&gt;commit();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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 4. If something is wrong or you want to cancel the changes, you can call the <code>rollback()<\/code> method:<\/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\">$pdo-&gt;rollback();<\/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<h2 class=\"wp-block-heading\">Creating new tables<\/h2>\n\n\n\n<p>Step 1. Open your 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 using <code>sqlite3<\/code> shell:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">sqlite3 my.db<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 3. Execute the following <code>CREATE TABLE<\/code> statement to create two new tables called<code>members<\/code> and <code>assignments<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" 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> members(\n    member_id <span class=\"hljs-built_in\">INTEGER<\/span> PRIMARY <span class=\"hljs-keyword\">KEY<\/span>,\n    <span class=\"hljs-keyword\">name<\/span> <span class=\"hljs-built_in\">TEXT<\/span> <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span>    \n);\n\n<span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> assignments(\n   member_id <span class=\"hljs-built_in\">INT<\/span>,\n   task_id <span class=\"hljs-built_in\">INT<\/span>,\n   <span class=\"hljs-keyword\">FOREIGN<\/span> <span class=\"hljs-keyword\">KEY<\/span>(member_id) <span class=\"hljs-keyword\">REFERENCES<\/span> members(member_id) <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-keyword\">DELETE<\/span> <span class=\"hljs-keyword\">CASCADE<\/span>,\n   <span class=\"hljs-keyword\">FOREIGN<\/span> <span class=\"hljs-keyword\">KEY<\/span>(task_id) <span class=\"hljs-keyword\">REFERENCES<\/span> tasks(task_id) <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-keyword\">DELETE<\/span> <span class=\"hljs-keyword\">CASCADE<\/span>\n);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><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>A member can have multiple tasks, and a task can belong to multiple members. The <code>assignments<\/code> table creates a <em>many-to-many<\/em> relationship between the <code>tasks<\/code> and <code>members<\/code> tables.<\/p>\n\n\n\n<p>Suppose we want to create a new task and assign it to a member. Additionally, we want both actions complete as a whole:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a new task.<\/li>\n\n\n\n<li>Assign it to a member.<\/li>\n<\/ul>\n\n\n\n<p>To guarantee this, both actions need to occur together in an&nbsp;all-or-nothing manner. We can achieve this using the PDO transaction feature.<\/p>\n\n\n\n<p>Step 4. List all the tables:<\/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\">.tables<\/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>Output:<\/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\">assignments  documents    members      projects     tasks<\/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<h2 class=\"wp-block-heading\">Adding a member to the members table<\/h2>\n\n\n\n<p>Step 1. Create a new file <code>insert-member.php<\/code> within the project directory.<\/p>\n\n\n\n<p>Step 2. Insert a row into the <code>members<\/code> table:<\/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\"><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_member<\/span><span class=\"hljs-params\">($pdo, $name)<\/span> <\/span>{\n    $sql = <span class=\"hljs-string\">'INSERT INTO members(name) VALUES(:name)'<\/span>;\n    $stmt = $pdo-&gt;prepare($sql);\n    $stmt-&gt;execute(&#91;\n        <span class=\"hljs-string\">':name'<\/span> =&gt; $name,\n    ]);\n    <span class=\"hljs-keyword\">return<\/span> $pdo-&gt;lastInsertId();\n}\n\n$dsn = <span class=\"hljs-string\">\"sqlite:$db\"<\/span>;\n\n<span class=\"hljs-keyword\">try<\/span> {\n    $pdo = <span class=\"hljs-keyword\">new<\/span> \\PDO($dsn);\n    insert_member($pdo, <span class=\"hljs-string\">'Bob'<\/span>);\n\n} <span class=\"hljs-keyword\">catch<\/span>(\\PDOException $e){\n    <span class=\"hljs-keyword\">echo<\/span> $e-&gt;getMessage();\n}<\/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 3. Run the <code>insert-member.php<\/code> script.<\/p>\n\n\n\n<p>It&#8217;ll create a new member with id 1:<\/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\">member_id  name\n---------  ----\n<span class=\"hljs-number\">1<\/span>          Bob<\/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<h2 class=\"wp-block-heading\">SQLite PHP transaction example<\/h2>\n\n\n\n<p>Step 1. Create a new file <code>transaction.php<\/code> within the project directory:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" 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_once<\/span> <span class=\"hljs-string\">'config.php'<\/span>;\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">insert_task<\/span><span class=\"hljs-params\">($pdo, $taskName,  $startDate, $completedDate, $completed, $projectId)<\/span> <\/span>{\n\n    $sql = <span class=\"hljs-string\">'INSERT INTO tasks(task_name,start_date,completed_date,completed,project_id) '<\/span>\n                . <span class=\"hljs-string\">'VALUES(:task_name,:start_date,:completed_date,:completed,:project_id)'<\/span>;\n\n    $stmt = $pdo-&gt;prepare($sql);\n\n    $stmt-&gt;execute(&#91;\n        <span class=\"hljs-string\">':task_name'<\/span> =&gt; $taskName,\n        <span class=\"hljs-string\">':start_date'<\/span> =&gt; $startDate,\n        <span class=\"hljs-string\">':completed_date'<\/span> =&gt; $completedDate,\n        <span class=\"hljs-string\">':completed'<\/span> =&gt; $completed,\n        <span class=\"hljs-string\">':project_id'<\/span> =&gt; $projectId,\n    ]);\n\n    <span class=\"hljs-keyword\">return<\/span> $pdo-&gt;lastInsertId();\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">insert_assignment<\/span><span class=\"hljs-params\">($pdo , $taskId, $memberId)<\/span> <\/span>{\n\n    $sql = <span class=\"hljs-string\">'INSERT INTO task_assignments(task_id,member_id) VALUES(:task_id,:member_id)'<\/span>;\n    $stmt = $pdo-&gt;prepare($sql);\n\n    $stmt-&gt;execute(&#91;\n        <span class=\"hljs-string\">':task_id'<\/span> =&gt; $taskId,\n        <span class=\"hljs-string\">':member_id'<\/span> =&gt; $memberId,\n    ]);\n\n}\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">assign_task<\/span><span class=\"hljs-params\">($pdo, $taskName,  $startDate, $completedDate, $completed, $projectId, $member_id)<\/span> <\/span>{\n\n    <span class=\"hljs-keyword\">try<\/span> {\n        $pdo-&gt;beginTransaction();\n\n        $taskId = insert_task($pdo, $taskName,  $startDate, $completedDate, $completed, $projectId);\n\n        <span class=\"hljs-keyword\">if<\/span> ($taskId &gt; <span class=\"hljs-number\">0<\/span>) {\n            insert_assignment($pdo, $taskId, $member_id);\n            $pdo-&gt;commit();\n        }  <span class=\"hljs-keyword\">else<\/span> {\n            $pdo-&gt;rollBack();\n            <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> \\<span class=\"hljs-keyword\">Exception<\/span>(<span class=\"hljs-string\">'Failed to insert task'<\/span>);\n        }\n        \n    } <span class=\"hljs-keyword\">catch<\/span>(\\PDOException $e){\n        <span class=\"hljs-keyword\">echo<\/span> $e-&gt;getMessage();\n        $pdo-&gt;rollback();\n        <span class=\"hljs-keyword\">throw<\/span> $e;\n    }\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\">\/\/ enable foreign keys<\/span>\n    $pdo-&gt;exec(<span class=\"hljs-string\">'PRAGMA foreign_keys = ON'<\/span>);\n\n    <span class=\"hljs-comment\">\/\/ assign a task to a member<\/span>\n    $member_id = <span class=\"hljs-number\">1<\/span>;\n    $taskName = <span class=\"hljs-string\">'Create a simple SQLite-based application'<\/span>;\n    $startDate = <span class=\"hljs-string\">'2016-06-01'<\/span>;\n\n    assign_task($pdo, $taskName, $startDate, <span class=\"hljs-keyword\">null<\/span>, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">1<\/span>, $member_id);\n\n} <span class=\"hljs-keyword\">catch<\/span>(\\PDOException $e) {\n    <span class=\"hljs-keyword\">echo<\/span> $e-&gt;getMessage();\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><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. Run the <code>transaction.php<\/code> script.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verify the data<\/h2>\n\n\n\n<p>Querying data from the <code>tasks<\/code> table:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">SELECT * FROM tasks ORDER BY task_id DESC LIMIT <span class=\"hljs-number\">1<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><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>Output:<\/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\">task_id  task_name                                 completed  start_date  completed_date  project_id\n-------  ----------------------------------------  ---------  ----------  --------------  ----------\n<span class=\"hljs-number\">11<\/span>       Create a simple SQLite-based application  <span class=\"hljs-number\">0<\/span>          <span class=\"hljs-number\">2016<\/span><span class=\"hljs-number\">-06<\/span><span class=\"hljs-number\">-01<\/span>  <span class=\"hljs-keyword\">null<\/span>            <span class=\"hljs-number\">1<\/span><\/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>Querying data from the <code>assignments<\/code> table:<\/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\">SELECT * FROM assignments;<\/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>Output:<\/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\">member_id  task_id\n---------  -------\n<span class=\"hljs-number\">1<\/span>          <span class=\"hljs-number\">11<\/span><\/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<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Call the <code>$pdo-&gt;beginTransaction()<\/code> to start a transaction.<\/li>\n\n\n\n<li>Call the <code>$pdo-&gt;commit()<\/code> method to apply the changes permanently to the database.<\/li>\n\n\n\n<li>Call the <code>$pdo-&gt;rollback()<\/code> method to cancel the changes.<\/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=\"960\"\n\t\t\t\tdata-post-url=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/\"\n\t\t\t\tdata-post-title=\"SQLite PHP: Transaction\"\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=\"960\"\n\t\t\t\tdata-post-url=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/\"\n\t\t\t\tdata-post-title=\"SQLite PHP: Transaction\"\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>Summary: in this tutorial, you will learn how to manage transactions in SQLite databases from PHP using PDO to ensure data integrity. This tutorial begins where the \u201cWorking with BLOB data in PHP\u201d tutorial left off. Managing transactions When you update data in an SQLite database, PHP automatically commits the changes to the database. To [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":891,"menu_order":7,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-960","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 Transaction with Examples<\/title>\n<meta name=\"description\" content=\"This tutorial shows you step by step how to use the PHP PDO transaction API to perform transactions in the SQLite database.\" \/>\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\/transaction\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQLite PHP Transaction with Examples\" \/>\n<meta property=\"og:description\" content=\"This tutorial shows you step by step how to use the PHP PDO transaction API to perform transactions in the SQLite database.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/\" \/>\n<meta property=\"og:site_name\" content=\"SQLite Tutorial\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-28T15:17:43+00:00\" \/>\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=\"2 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\/transaction\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/www.sqlitetutorial.net\/#\/schema\/person\/6d69b968cad0102e30d6694ed8dc6427\"},\"headline\":\"SQLite PHP: Transaction\",\"datePublished\":\"2016-05-17T04:20:33+00:00\",\"dateModified\":\"2024-10-28T15:17:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/\"},\"wordCount\":340,\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/\",\"url\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/\",\"name\":\"SQLite PHP Transaction with Examples\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlitetutorial.net\/#website\"},\"datePublished\":\"2016-05-17T04:20:33+00:00\",\"dateModified\":\"2024-10-28T15:17:43+00:00\",\"description\":\"This tutorial shows you step by step how to use the PHP PDO transaction API to perform transactions in the SQLite database.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/#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: Transaction\"}]},{\"@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 Transaction with Examples","description":"This tutorial shows you step by step how to use the PHP PDO transaction API to perform transactions in the SQLite database.","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\/transaction\/","og_locale":"en_US","og_type":"article","og_title":"SQLite PHP Transaction with Examples","og_description":"This tutorial shows you step by step how to use the PHP PDO transaction API to perform transactions in the SQLite database.","og_url":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/","og_site_name":"SQLite Tutorial","article_modified_time":"2024-10-28T15:17:43+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/#article","isPartOf":{"@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/"},"author":{"name":"admin","@id":"https:\/\/www.sqlitetutorial.net\/#\/schema\/person\/6d69b968cad0102e30d6694ed8dc6427"},"headline":"SQLite PHP: Transaction","datePublished":"2016-05-17T04:20:33+00:00","dateModified":"2024-10-28T15:17:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/"},"wordCount":340,"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/","url":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/","name":"SQLite PHP Transaction with Examples","isPartOf":{"@id":"https:\/\/www.sqlitetutorial.net\/#website"},"datePublished":"2016-05-17T04:20:33+00:00","dateModified":"2024-10-28T15:17:43+00:00","description":"This tutorial shows you step by step how to use the PHP PDO transaction API to perform transactions in the SQLite database.","breadcrumb":{"@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlitetutorial.net\/sqlite-php\/transaction\/#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: Transaction"}]},{"@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\/960","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=960"}],"version-history":[{"count":5,"href":"https:\/\/www.sqlitetutorial.net\/wp-json\/wp\/v2\/pages\/960\/revisions"}],"predecessor-version":[{"id":4035,"href":"https:\/\/www.sqlitetutorial.net\/wp-json\/wp\/v2\/pages\/960\/revisions\/4035"}],"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=960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}