В этом уроке я покажу вам, как создавать новые таблицы в базе данных SQLite с использованием PHP PDO.

Мы создадим две новые таблицы в базе данных phpsqlite, которую мы создали в предыдущем уроке . Ниже приведен код SQL, который создает таблицы проектов и задач.

CREATE TABLE IF NOT EXISTS projects (
  project_id   INTEGER PRIMARY KEY,
  project_name TEXT    NOT NULL
);
 
CREATE TABLE IF NOT EXISTS tasks (
  task_id        INTEGER PRIMARY KEY,
  task_name      TEXT    NOT NULL,
  completed      INTEGER NOT NULL,
  start_date     TEXT,
  completed_date TEXT,
  project_id     INTEGER NOT NULL,
  FOREIGN KEY (
      project_id
  )
  REFERENCES projects (project_id) ON UPDATE CASCADE
                                   ON DELETE CASCADE
);

Чтобы создать новую таблицу в базе данных SQLite с помощью PDO, используйте следующие шаги:

  • Сначала подключитесь к базе данных SQLite, создав экземпляр класса PDO.
  • Во-вторых, выполните инструкцию CREATE TABLE, вызвав метод exec () объекта PDO.

Мы будем повторно использовать класс SQLiteConnection, который мы разработали в предыдущем уроке. Следующий класс SQLiteCreateTable демонстрирует, как создавать новые таблицы в нашей базе данных phpsqlite.

<?php
 
namespace App;
 
/**
 * SQLite Create Table Demo
 */
class SQLiteCreateTable {
 
  /**
   * PDO object
   * @var \PDO
   */
  private $pdo;

  /**
   * connect to the SQLite database
   */
  public function __construct($pdo) {
      $this->pdo = $pdo;
  }

  /**
   * create tables 
   */
  public function createTables() {
    $commands = ['CREATE TABLE IF NOT EXISTS projects (
        project_id   INTEGER PRIMARY KEY,
        project_name TEXT NOT NULL
      )',
    'CREATE TABLE IF NOT EXISTS tasks (
            task_id INTEGER PRIMARY KEY,
            task_name  VARCHAR (255) NOT NULL,
            completed  INTEGER NOT NULL,
            start_date TEXT,
            completed_date TEXT,
            project_id VARCHAR (255),
            FOREIGN KEY (project_id)
            REFERENCES projects(project_id) ON UPDATE CASCADE
                                         ON DELETE CASCADE)'];
    // execute the sql commands to create new tables
    foreach ($commands as $command) {
        $this->pdo->exec($command);
    }
  }
 
  /**
   * get the table list in the database
   */
  public function getTableList() {

    $stmt = $this->pdo->query("SELECT name
                               FROM sqlite_master
                               WHERE type = 'table'
                               ORDER BY name");
    $tables = [];
    while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
        $tables[] = $row['name'];
    }

    return $tables;
  } 
}

Как это устроено?

Метод createTables() используется для создания таблиц в базе данных phpsqlite. Во-первых, у нас есть массив, в котором хранятся операторы CREATE TABLE. Затем мы перебираем массив и выполняем каждую инструкцию CREATE TABLE один за другим, используя метод exec() объекта PDO.

Метод getTableList() выбирает все таблицы в базе данных, запрашивая имя таблицы в таблице sqlite_master. Предикат в предложении WHERE гарантирует, что запрос возвращает только таблицы, а не представления. Вы узнаете, как запрашивать данные при использовании PDO в следующем уроке.

Теперь пришло время использовать разработанные нами классы. В файле index.php используйте следующий код:

<?php
require 'vendor/autoload.php';
 
use App\SQLiteConnection as SQLiteConnection;
use App\SQLiteCreateTable as SQLiteCreateTable;
 
$sqlite = new SQLiteCreateTable((new SQLiteConnection())->connect());
// create new tables
$sqlite->createTables();
// get the table list
$tables = $sqlite->getTableList();
?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="sqlitetutorial.net">
    <title>PHP SQLite CREATE TABLE Demo</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
  </head>
    <body>
      <div class="container">
        <div class="page-header">
            <h1>PHP SQLite CREATE TABLE Demo</h1>
        </div>
        <table class="table table-bordered">
          <thead>
              <tr>
                  <th>Tables</th>
              </tr>
          </thead>
          <tbody>
              <?php foreach ($tables as $table) : ?>
                  <tr>
                      <td><?php echo $table ?></td>
                  </tr>
              <?php endforeach; ?>
          </tbody>
        </table>
      </div>
    </body>
</html>

Сначала мы создаем новый экземпляр класса SQLiteCreateTable и передаем объект PDO, который создается с помощью класса SQLiteConnection.

Во-вторых, мы вызываем метод createTables() для создания новых таблиц и метод getTableList() для запроса вновь созданных таблиц.

В-третьих, в HTML коде мы отображаем список таблиц.

В этом уроке я показал, как создавать новые таблицы, выполняя оператор CREATE TABLE с использованием PHP PDO.