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

Мы будем использовать таблицы проектов и задач, созданную нами в уроке по созданию таблиц .

Чтобы вставить данные в таблицу, выполните следующие действия:

  • Подключитесь к базе данных SQLite , создав новый экземпляр PDO с путем к файлу базы данных SQLite.
  • Составьте инструкцию INSERT.
  • Вызовите метод prepare() объекта PDO, чтобы подготовить оператор INSERT к выполнению. Этот метод возвращает объект PDOStatement.
  • Свяжите значения с параметрами, вызвав метод bindValue() объекта PDOStatement.
  • Выполните инструкцию, вызвав метод execute() объекта PDOStatement.
  • В случае, если таблица имеет сгенерированный столбец автоинкремента в качестве первичного ключа, вы можете получить вставленный идентификатор, вызвав метод lastInsertId() объекта PDO.

В следующем классе SQLiteInsert есть два метода для вставки данных в таблицы. Метод insertProject() вставляет новый проект в таблицу проектов, а метод insertTask() вставляет новую задачу в таблицу задач.

<?php
 
namespace App;
 
/**
 * PHP SQLite Insert Demo
 */
class SQLiteInsert {
 
  /**
   * PDO object
   * @var \PDO
   */
  private $pdo;

  /**
   * Initialize the object with a specified PDO object
   * @param \PDO $pdo
   */
  public function __construct($pdo) {
    $this->pdo = $pdo;
  }

  /**
   * Insert a new project into the projects table
   * @param string $projectName
   * @return the id of the new project
   */
  public function insertProject($projectName) {
    $sql = 'INSERT INTO projects(project_name) VALUES(:project_name)';
    $stmt = $this->pdo->prepare($sql);
    $stmt->bindValue(':project_name', $projectName);
    $stmt->execute();

    return $this->pdo->lastInsertId();
  }

  /**
   * Insert a new task into the tasks table
   * @param type $taskName
   * @param type $startDate
   * @param type $completedDate
   * @param type $completed
   * @param type $projectId
   * @return int id of the inserted task
   */
  public function insertTask($taskName, $startDate, $completedDate, $completed, $projectId) {
    $sql = 'INSERT INTO tasks(task_name,start_date,completed_date,completed,project_id) '
            . 'VALUES(:task_name,:start_date,:completed_date,:completed,:project_id)';

    $stmt = $this->pdo->prepare($sql);
    $stmt->execute([
      ':task_name' => $taskName,
      ':start_date' => $startDate,
      ':completed_date' => $completedDate,
      ':completed' => $completed,
      ':project_id' => $projectId,
    ]);

    return $this->pdo->lastInsertId();
  } 
}

В методе insertTask() вместо значений привязки мы передаем вставленные значения в виде массива в метод execute().

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

<?php
 
require 'vendor/autoload.php';
 
use App\SQLiteConnection;
use App\SQLiteInsert;
 
$pdo = (new SQLiteConnection())->connect();
$sqlite = new SQLiteInsert($pdo);
 
// insert a new project
$projectId = $sqlite->insertProject('PHP SQLite Demo');
// insert some tasks for the project
$sqlite->insertTask('Prepare the sample database schema', '2016-06-01', '2016-06-01', 1, $projectId);
$sqlite->insertTask('Create new tables ', '2016-05-01', null, 0, $projectId);
$sqlite->insertTask('Insert some sample data', '2016-05-01', '2016-06-02', 1, $projectId);
 
// insert a second project
$projectId = $sqlite->insertProject('Mastering SQLite');
// insert the tasks for the second project
$sqlite->insertTask('Go to sqlitetutorial.net', '2016-06-01', null, 0, $projectId);
$sqlite->insertTask('Read all the tutorials.', '2016-06-01', null, 0, $projectId);
$sqlite->insertTask('Use Try It page to practice the SQLite commands.', '2016-06-01', null, 0, $projectId);
$sqlite->insertTask('Develop a simple SQLite-based application', '2016-06-15', null, 0, $projectId);

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