<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 在 PostgreSQL 中使用 PHP 進行事務 > 原文: [http://zetcode.com/db/postgresqlphp/trans/](http://zetcode.com/db/postgresqlphp/trans/) 在本章中,我們將處理事務。 首先,我們提供一些基本定義。 然后,我們將使用事務的示例程序。 事務是針對一個或多個數據庫中數據的數據庫操作的基本單位。 事務中的 SQL 語句可以全部提交給數據庫,也可以全部回滾。 為了數據安全和完整性,將 SQL 語句放入事務中。 在 PostgreSQL PHP 中,每個 SQL 語句在執行后都會提交給數據庫。 并非所有語言綁定都是如此。 例如,在 Python 的`psycopg2`模塊中,默認情況下,必須使用`commit()`方法顯式提交所有更改。 在直接 SQL 中,事務以`BEGIN TRANSACTION`語句開始,并以`END TRANSACTION`和`COMMIT`語句結束。 在 PostgreSQL 中,這些語句是`BEGIN`和`COMMIT`。 在某些驅動程序中,這些語句被省略。 它們由驅動處理。 在 PHP 中沒有這樣的方法,我們必須使用直接 SQL。 (在 PHP PDO 中有這樣的方法。) ```php <?php $host = "localhost"; $user = "user12"; $pass = "34klq*"; $db = "testdb"; $con = pg_connect("host=$host dbname=$db user=$user password=$pass") or die ("Could not connect to server\n"); pg_query("BEGIN") or die("Could not start transaction\n"); $res1 = pg_query("DELETE FROM cars WHERE id IN (1, 9)"); $res2 = pg_query("INSERT INTO cars VALUES (1, 'BMW', 36000), (9, 'Audi', 52642)"); if ($res1 and $res2) { echo "Commiting transaction\n"; pg_query("COMMIT") or die("Transaction commit failed\n"); } else { echo "Rolling back transaction\n"; pg_query("ROLLBACK") or die("Transaction rollback failed\n");; } pg_close($con); ?> ``` 我們有汽車表。 我們要交換第一行和最后一行。 我們分兩個步驟進行。 首先,我們刪除兩行。 然后,我們將其插入并交換 ID。 這兩個操作需要放在事務中。 如果第一步成功而第二步失敗,則數據將被破壞。 因此,我們需要全部完成或什么都不做。 ```php pg_query("BEGIN") or die("Could not start transaction\n"); ``` 我們通過發出`BEGIN`語句開始新的事務。 ```php $res1 = pg_query("DELETE FROM cars WHERE id IN (1, 9)"); $res2 = pg_query("INSERT INTO cars VALUES (1, 'BMW', 36000), (9, 'Audi', 52642)"); ``` 這是兩個修改表的 SQL 語句。 兩個`pg_query()`函數都返回`true`或`false`布爾值,指示 SQL 命令是否失敗。 ```php if ($res1 and $res2) { echo "Commiting transaction\n"; pg_query("COMMIT") or die("Transaction commit failed\n"); } else { echo "Rolling back transaction\n"; pg_query("ROLLBACK") or die("Transaction rollback failed\n");; } ``` 如果兩個函數調用都返回`true`,則使用`COMMIT`語句提交事務。 否則,我們將使用`ROLLBACK`語句回滾更改。 ```php $ php transaction.php Commiting transaction testdb=# SELECT * FROM cars ORDER BY id; id | name | price ----+------------+-------- 1 | BMW | 36000 2 | Mercedes | 57127 3 | Skoda | 9000 4 | Volvo | 29000 5 | Bentley | 350000 6 | Citroen | 21000 7 | Hummer | 41400 8 | Volkswagen | 21606 9 | Audi | 52642 (9 rows) ``` 行已成功交換。 在 PostgreSQL PHP 教程的這一部分中,我們提到了事務。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看