<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # PHP SQLite3 教程 > 原文: [https://zetcode.com/php/sqlite3/](https://zetcode.com/php/sqlite3/) 這是針對 SQLite 版本 3 數據庫的 PHP 編程教程。 它涵蓋了使用 PHP 語言進行 SQLite 編程的基礎。 要使用本教程,我們必須在系統上安裝 PHP CLI。 為了使用 SQLite 數據庫,我們可以安裝`sqlite3`命令行工具或 SQLite 瀏覽器 GUI。 ```php $ php -v PHP 7.2.11 (cli) (built: Oct 10 2018 02:39:52) ( ZTS MSVC15 (Visual C++ 2017) x86 ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies ``` 在本教程中,我們使用 PHP 7.2.11。 ```php ... ;extension=sockets extension=sqlite3 ;extension=tidy ... ``` SQLite 隨 PHP 一起提供; 我們不需要安裝它。 我們必須在`php.ini`文件中啟用 sqlite3 擴展。 ## SQLite SQLite 是嵌入式關系數據庫引擎。 該文檔稱其為自包含,無服務器,零配置和事務型 SQL 數據庫引擎。 如今,它在全球使用著數億冊,非常受歡迎。 幾種編程語言都內置了對 SQLite 的支持,包括 PHP 和 Python。 ## 創建 SQLite 數據庫 我們使用`sqlite3`命令行工具創建一個新數據庫。 ```php $ sqlite3 test.db SQLite version 3.27.2 2019-02-25 16:06:06 Enter ".help" for usage hints. sqlite> ``` 我們為`sqlite3`工具提供了一個參數; `test.db`是數據庫名稱。 這是我們磁盤上的文件。 如果存在,則將其打開。 如果不是,則創建它。 ```php sqlite> .tables sqlite> .exit $ ls test.db ``` `.tables`命令提供`test.db`數據庫中的表的列表。 當前沒有表格。 `.exit`命令終止`sqlite3`命令行工具的交互式會話。 `ls`命令顯示當前工作目錄的內容。 我們可以看到`test.db`文件。 所有數據將存儲在該單個文件中。 ## PHP SQLite3 版本示例 在以下示例中,我們獲得了 SQLite 數據庫的版本。 `version.php` ```php <?php $ver = SQLite3::version(); echo $ver['versionString'] . "\n"; echo $ver['versionNumber'] . "\n"; var_dump($ver); ``` `SQLite3::version()`返回 SQLite 數據庫的版本。 ```php $ php version.php 3.20.1 3020001 array(2) { ["versionString"]=> string(6) "3.20.1" ["versionNumber"]=> int(3020001) } ``` 這是輸出。 `version2.php` ```php <?php $db = new SQLite3('test.db'); $version = $db->querySingle('SELECT SQLITE_VERSION()'); echo $version . "\n"; ``` 程序返回 SQLite 數據庫的當前版本。 這次我們執行了`SELECT SQLITE_VERSION()`語句。 ```php $db = new SQLite3('test.db'); ``` 我們創建一個 SQLite3 對象并打開一個 SQLite3 數據庫連接。 ```php $version = $db->querySingle('SELECT SQLITE_VERSION()'); ``` `querySingle()`執行查詢并返回單個結果。 ```php $ php version2.php 3.20.1 ``` This is the output. ## PHP SQLite3 執行 `exec()`對給定的數據庫執行無結果查詢。 `create_table.php` ```php <?php $db = new SQLite3('test.db'); $db->exec("CREATE TABLE cars(id INTEGER PRIMARY KEY, name TEXT, price INT)"); $db->exec("INSERT INTO cars(name, price) VALUES('Audi', 52642)"); $db->exec("INSERT INTO cars(name, price) VALUES('Mercedes', 57127)"); $db->exec("INSERT INTO cars(name, price) VALUES('Skoda', 9000)"); $db->exec("INSERT INTO cars(name, price) VALUES('Volvo', 29000)"); $db->exec("INSERT INTO cars(name, price) VALUES('Bentley', 350000)"); $db->exec("INSERT INTO cars(name, price) VALUES('Citroen', 21000)"); $db->exec("INSERT INTO cars(name, price) VALUES('Hummer', 41400)"); $db->exec("INSERT INTO cars(name, price) VALUES('Volkswagen', 21600)"); ``` 該程序將創建一個`cars`表,并將八行插入該表中。 ```php $db->exec("CREATE TABLE cars(id INTEGER PRIMARY KEY, name TEXT, price INT)"); ``` 該 SQL 語句創建一個新的`cars`表。 該表有三列。 請注意,在 SQLite 數據庫中,`INTEGER PRIMARY KEY`列是自動增加的。 ```php $db->exec("INSERT INTO cars(name, price) VALUES('Audi', 52642)"); $db->exec("INSERT INTO cars(name, price) VALUES('Mercedes', 57127)"); ``` 這兩行將兩輛車插入表。 ```php sqlite> .mode column sqlite> .headers on ``` 我們使用`sqlite3`工具驗證寫入的數據。 首先,我們修改數據在控制臺中的顯示方式。 我們使用列模式并打開標題。 ```php sqlite> select * from cars; id name price ---------- ---------- ---------- 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600 ``` 這是我們已寫入`cars`表的數據。 ## PHP SQLite3 `lastInsertRowID` 有時,我們需要確定最后插入的行的 ID。 在 PHP SQLite3 中,我們使用`lastInsertRowID()`方法。 `last_rowid.php` ```php <?php $db = new SQLite3(':memory:'); $db->exec("CREATE TABLE friends(id INTEGER PRIMARY KEY, name TEXT)"); $db->exec("INSERT INTO friends(name) VALUES ('Tom')"); $db->exec("INSERT INTO friends(name) VALUES ('Rebecca')"); $db->exec("INSERT INTO friends(name) VALUES ('Jim')"); $db->exec("INSERT INTO friends(name) VALUES ('Robert')"); $last_row_id = $db->lastInsertRowID(); echo "The last inserted row Id is $last_row_id"; ``` 我們在內存中創建一個`friends`表。 ID 會自動遞增。 ```php $db->exec("CREATE TABLE friends(id INTEGER PRIMARY KEY, name TEXT)"); ``` 在 SQLite3 中,`INTEGER PRIMARY KEY`列自動增加。 還有一個`AUTOINCREMENT`關鍵字。 在`INTEGER PRIMARY KEY AUTOINCREMENT`中使用時,會使用稍微不同的 ID 創建算法。 ```php $db->exec("CREATE TABLE friends(id INTEGER PRIMARY KEY, name TEXT)"); $db->exec("INSERT INTO friends(name) VALUES ('Tom')"); $db->exec("INSERT INTO friends(name) VALUES ('Rebecca')"); $db->exec("INSERT INTO friends(name) VALUES ('Jim')"); $db->exec("INSERT INTO friends(name) VALUES ('Robert')"); ``` 使用自動增量時,我們必須明確聲明列名,而忽略自動增量的列名。 這四個語句在`friends`表中插入四行。 ```php $last_row_id = $db->lastInsertRowID(); ``` 使用`lastInsertRowID()`獲得最后插入的行 ID。 ```php $ php last_rowid.php The last inserted row Id is 4 ``` 我們看到了程序的輸出。 ## PHP SQLite3 查詢 `query()`方法執行 SQL 查詢并返回結果對象。 `fetch_all.php` ```php <?php $db = new SQLite3('test.db'); $res = $db->query('SELECT * FROM cars'); while ($row = $res->fetchArray()) { echo "{$row['id']} {$row['name']} {$row['price']} \n"; } ``` 該示例從`cars`表中檢索所有數據。 ```php $res = $db->query('SELECT * FROM cars'); ``` 該 SQL 語句從`cars`表中選擇所有數據。 ```php while ($row = $res->fetchArray()) { ``` `fetchall()`檢索結果行作為關聯數組或數字索引數組,或兩者都檢索(默認為兩者)。 如果沒有更多行,則返回`false`。 ```php $ php fetch_all.php 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600 ``` 這是示例的輸出。 ## PHP SQLite3 `escapeString` `escapeString()`返回已正確轉義的字符串。 `escape_string.php` ```php <?php $db = new SQLite3('test.db'); $sql = "SELECT name FROM cars WHERE name = 'Audi'"; $escaped = SQLite3::escapeString($sql); var_dump($sql); var_dump($escaped); ``` 該示例對查詢中的字符串進行轉義。 ```php $ php escape_string.php string(41) "SELECT name FROM cars WHERE name = 'Audi'" string(43) "SELECT name FROM cars WHERE name = ''Audi''" ``` This is the output of the example. ## PHP SQLite3 參數化語句 SQL 語句通常是動態構建的。 用戶提供一些輸入,并且此輸入已內置到語句中。 每當我們處理來自用戶的輸入時,我們都必須謹慎。 它具有一些嚴重的安全隱患。 動態構建 SQL 語句的推薦方法是使用參數綁定。 使用`prepare()`創建參數化查詢; 它準備要執行的 SQL 語句并返回一個語句對象。 PHP SQLite3 具有`bindParam()`和`bindValue()`方法來將值綁定到占位符。 它允許將數據綁定到問號或命名的占位符。 ### 帶問號的參數化語句 在第一個示例中,我們使用問號的語法。 `prepared.php` ```php <?php $db = new SQLite3('test.db'); $stm = $db->prepare('SELECT * FROM cars WHERE id = ?'); $stm->bindValue(1, 3, SQLITE3_INTEGER); $res = $stm->execute(); $row = $res->fetchArray(SQLITE3_NUM); echo "{$row[0]} {$row[1]} {$row[2]}"; ``` 我們選擇使用問號占位符的汽車。 ```php $stm = $db->prepare('SELECT * FROM cars WHERE id = ?'); ``` 問號`?`是值的占位符。 稍后將這些值添加(綁定)到占位符。 ```php $stm->bindValue(1, 3, SQLITE3_INTEGER); ``` 使用`bindValue()`,將值 3 綁定到問號占位符。 第一個參數是位置參數,用于標識占位符(可以有多個問號占位符)。 ```php $ php prepared.php 3 Skoda 9000 ``` This is the output. ### 具有命名占位符的參數化語句 第二個示例使用帶有命名占位符的參數化語句。 `prepared2.php` ```php <?php $db = new SQLite3('test.db'); $stm = $db->prepare('SELECT * FROM cars WHERE id = :id'); $stm->bindValue(':id', 1, SQLITE3_INTEGER); $res = $stm->execute(); $row = $res->fetchArray(SQLITE3_NUM); echo "{$row[0]} {$row[1]} {$row[2]}"; ``` 我們使用命名的占位符選擇特定的汽車。 ```php $stm = $db->prepare('SELECT * FROM cars WHERE id = :id'); ``` 命名的占位符以冒號開頭。 ### PHP SQLite3 bind_param `bind_param()`將參數綁定到語句變量。 它可以用于處理多行。 `bind_param.php` ```php ??php $db = new SQLite3(':memory:'); $db->exec("CREATE TABLE friends(id INTEGER PRIMARY KEY, firstname TEXT, lastname TEXT)"); $stm = $db->prepare("INSERT INTO friends(firstname, lastname) VALUES (?, ?)"); $stm->bindParam(1, $firstName); $stm->bindParam(2, $lastName); $firstName = 'Peter'; $lastName = 'Novak'; $stm->execute(); $firstName = 'Lucy'; $lastName = 'Brown'; $stm->execute(); $res = $db->query('SELECT * FROM friends'); while ($row = $res->fetchArray()) { echo "{$row[0]} {$row[1]} {$row[2]}\n"; } ``` 在示例中,我們將兩行插入到帶有參數化語句的表中。 要綁定占位符,我們使用`bind_param()`方法。 ```php $ php bind_param.php 1 Peter Novak 2 Lucy Brown ``` This is the output. ## PHP SQLite3 元數據 元數據是有關數據庫中數據的信息。 SQLite 中的元數據包含有關表和列的信息,我們在其中存儲數據。 受 SQL 語句影響的行數是元數據。 結果集中返回的行數和列數也屬于元數據。 可以使用特定的 PHP SQLite3 方法,`PRAGMA`命令或通過查詢 SQLite 系統`sqlite_master`表來獲取 SQLite 中的元數據。 `num_of_columns.php` ```php <?php $db = new SQLite3('test.db'); $res = $db->query("SELECT * FROM cars WHERE id = 1"); $cols = $res->numColumns(); echo "There are {$cols} columns in the result set\n"; ``` `numColumns()`返回結果集中的列數。 ```php $ php num_of_columns.php There are 3 columns in the result set ``` This is the output. `column_names.php` ```php <?php $db = new SQLite3('test.db'); $res = $db->query("PRAGMA table_info(cars)"); while ($row = $res->fetchArray(SQLITE3_NUM)) { echo "{$row[0]} {$row[1]} {$row[2]}\n"; } ``` 在此示例中,我們發出`PRAGMA table_info(tableName)`命令以獲取有關`cars`表的一些元數據信息。 ```php $res = $db->query("PRAGMA table_info(cars)"); ``` `PRAGMA table_info(tableName)`命令為`cars`表中的每一列返回一行。 結果集中的列包括列順序號,列名稱,數據類型,該列是否可以為`NULL`以及該列的默認值。 ```php while ($row = $res->fetchArray(SQLITE3_NUM)) { echo "{$row[0]} {$row[1]} {$row[2]}\n"; } ``` 根據提供的信息,我們打印列順序號,列名稱和列數據類型。 ```php $ php column_names.php 0 id INTEGER 1 name TEXT 2 price INT ``` This is the output of the example. 在下面的示例中,我們打印`cars`表中的所有行及其列名。 `column_names2.php` ```php <?php $db = new SQLite3('test.db'); $res = $db->query("SELECT * FROM cars"); $col1 = $res->columnName(1); $col2 = $res->columnName(2); $header = sprintf("%-10s %s\n", $col1, $col2); echo $header; while ($row = $res->fetchArray()) { $line = sprintf("%-10s %s\n", $row[1], $row[2]); echo $line; } ``` 我們還將`cars`表的內容與列名一起打印到控制臺。 記錄與列名對齊。 ```php $col1 = $res->columnName(1); ``` `columnName()`返回第 n 列的名稱。 ```php $header = sprintf("%-10s %s\n", $col1, $col2); echo $header; ``` 這些行打印`cars`表的兩個列名。 ```php while ($row = $res->fetchArray()) { $line = sprintf("%-10s %s\n", $row[1], $row[2]); echo $line; } ``` 我們使用`while`循環打印行。 數據與列名對齊。 ```php $ php column_names2.php name price Audi 52642 Mercedes 57127 Skoda 9000 Volvo 29000 Bentley 350000 Citroen 21000 Hummer 41400 Volkswagen 21600 ``` This is the output. 在下一個示例中,我們列出`test.db`數據庫中的所有表。 `list_tables.php` ```php <?php $db = new SQLite3('test.db'); $res = $db->query("SELECT name FROM sqlite_master WHERE type='table'"); while ($row = $res->fetchArray(SQLITE3_NUM)) { echo "{$row[0]}\n"; } ``` 該代碼示例將指定數據庫中的所有可用表打印到終端。 ```php $res = $db->query("SELECT name FROM sqlite_master WHERE type='table'"); ``` 表名存儲在系統`sqlite_master`表中。 ```php $ php list_tables.php cars images ``` 這些是我們系統上的表。 `changes()`返回由最新 SQL 語句修改,插入或刪除的數據庫行數。 `changes.php` ```php <?php $db = new SQLite3(':memory:'); $db->exec("CREATE TABLE friends(id INTEGER PRIMARY KEY, name TEXT)"); $db->exec("INSERT INTO friends(name) VALUES ('Tom')"); $db->exec("INSERT INTO friends(name) VALUES ('Rebecca')"); $db->exec("INSERT INTO friends(name) VALUES ('Jim')"); $db->exec("INSERT INTO friends(name) VALUES ('Robert')"); $db->exec('DELETE FROM friends'); $changes = $db->changes(); echo "The DELETE statement removed $changes rows"; ``` 該示例返回已刪除的行數。 ```php $ php changes.php The DELETE statement removed 4 rows ``` This is the output. ## PHP SQLite3 PDO 示例 PHP 數據對象(PDO)定義了用于訪問 PHP 中的數據庫的輕量級接口。 它提供了一個數據訪問抽象層,用于在 PHP 中使用數據庫。 它定義了用于各種數據庫系統的一致 API。 PHP PDO 是一個內置庫; 我們不需要安裝它。 `list_tables.php` ```php <?php $pdo = new PDO('sqlite:test.db'); $stm = $pdo->query("SELECT * FROM cars"); $rows = $stm->fetchAll(PDO::FETCH_NUM); foreach($rows as $row) { printf("$row[0] $row[1] $row[2]\n"); } ``` 該示例使用 PHP PDO 獲取所有表行。 ## Dibi 的例子 PHP Dibi 是用于 PHP 的小型智能數據庫層。 ```php $ composer req dibi/dibi ``` 我們安裝庫。 `fetch_cars.php` ```php <?php require('vendor/autoload.php'); $db = dibi::connect([ 'driver' => 'sqlite', 'database' => 'test.db', ]); $rows = $db->query('SELECT * FROM cars'); foreach ($rows as $row) { $id = $row->id; $name = $row->name; $price = $row->price; echo "$id $name $price \n"; } ``` 該示例從`cars`表中提取所有行。 ## Doctrine DBAL 示例 Doctrine 是一組 PHP 庫,主要致力于在 PHP 中提供持久性服務。 它的主要項目是對象關系映射器(ORM)和數據庫抽象層(DBAL)。 ```php $ composer req doctrine/dbal ``` 我們安裝 Doctrine DBAL 包。 `fetch_cars.php` ```php <?php require_once "vendor/autoload.php"; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\FetchMode; $attrs = ['driver' => 'pdo_sqlite', 'path' => 'test.db']; $conn = DriverManager::getConnection($attrs); $queryBuilder = $conn->createQueryBuilder(); $queryBuilder->select('*')->from('cars'); $stm = $queryBuilder->execute(); $rows = $stm->fetchAll(FetchMode::NUMERIC); foreach ($rows as $row) { echo "{$row[0]} {$row[1]} {$row[2]}\n"; } ``` 該示例使用 Doctrine DBAL `QueryBuilder`從`cars`表中檢索所有行。 這是 PHP SQLite3 教程。 您可能也對以下相關教程感興趣: [Doctrine `QueryBuilder`教程](/doctrine/querybuilder/), [PHP PDO 教程](/php/pdo/)和 [PHP 教程](/lang/php/),或列出[所有 PHP 教程](/all/#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>

                              哎呀哎呀视频在线观看