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

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

  • Подключитесь к базе данных SQLite, используя объект PDO.
  • Используйте метод query() объекта PDO для выполнения инструкции SELECT. Метод query() возвращает набор результатов в виде объекта PDOStatement. Если вы хотите передать значения в оператор SELECT, вы создаете объект PDOStatement, вызывая метод prepare() объекта PDO, связывая значения с помощью метода bindValue() объекта PDOStatement и вызывая метод execute() для завершения выполнения.
  • Переберите набор результатов с помощью метода fetch() объекта PDOStatement и обработайте каждую строку отдельно.

Метод getProjects().

/**
 * Get all projects
 * @return type
 */
public function getProjects() {
  $stmt = $this->pdo->query('SELECT project_id, project_name '
          . 'FROM projects');
  $projects = [];
  while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
	  $projects[] = [
	      'project_id' => $row['project_id'],
	      'project_name' => $row['project_name']
	  ];
  }
  return $projects;
}

Этот метод извлекает все проекты из таблицы проектов, используя инструкцию SELECT:

SELECT project_id,
   project_name
FROM projects;

Сначала мы вызвали метод query() объекта PDO для запроса данных из таблицы проектов. Метод query() возвращает объект PDOStatement, который мы присвоилил в $stmt.

Затем мы вызвали метод fetch() объекта PDOStatement для получения следующей строки из набора результатов. Мы передали следующее значение параметру fetch_style метода fetch().

\PDO::FETCH_ASSOC

Параметр fetch_style определяет, в каком виде возвращать данные. FETCH_ASSOC означает, что метод fetch() вернет массив, проиндексированный по имени столбца.

В-третьих, мы собрали данные внутри цикла while и вернули результат в виде ассоциативного массива проектов.

Если вы хотите, чтобы метод fetch() возвращал строку в наборе результатов как объект, вы можете использовать:

\PDO::FETCH_OBJ 
// Или метод 
fetchObject().

Следующий метод getProjectObjectList() возвращает список объектов проектов.

/**
 * Get the project as an object list
 * @return an array of Project objects
 */
public function getProjectObjectList() {
  $stmt = $this->pdo->query('SELECT project_id, project_name '
        . 'FROM projects');

  $projects = [];
  while ($project = $stmt->fetchObject()) {
    $projects[] = $project;
  }

  return $projects;
}

Обратите внимание, что имена свойств объекта соответствуют именам столбцов в наборе результатов. Например, вы можете получить доступ к именам свойств объекта проекта как:

$project->project_id;
$project->project_name;

Метод getTasks():

/**
* Get tasks by the project id
* @param int $projectId
* @return an array of tasks in a specified project
*/
public function getTaskByProject($projectId) {
  // prepare SELECT statement
  $stmt = $this->pdo->prepare('SELECT task_id,
                                      task_name,
                                      start_date,
                                      completed_date,
                                      completed,
                                      project_id
                                 FROM tasks
                                WHERE project_id = :project_id;');

  $stmt->execute([':project_id' => $projectId]);

  // for storing tasks
  $tasks = [];

  while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
    $tasks[] = [
      'task_id' => $row['task_id'],
      'task_name' => $row['task_name'],
      'start_date' => $row['start_date'],
      'completed_date' => $row['completed_date'],
      'completed' => $row['completed'],
      'project_id' => $row['project_id'],
    ];
  }

  return $tasks;
}

В этом методе мы получаем все задачи, связанные с проектом, поэтому нам нужно передать идентификатор проекта в инструкцию SELECT.

Для этого мы используем метод prepare() для подготовки оператора SELECT к выполнению и передачи идентификатора проекта в оператор с помощью метода execute().

Если оператор SELECT возвращает одно значение, например, когда мы используем в запросе статистическую функцию, такую как COUNT, AVG, SUM, MIN, MAX и т. Д.

Чтобы получить значение, вы используете метод fetchColumn(), который возвращает один столбец из следующей строки в наборе результатов.

Следующий метод getTaskCountByProject(), который возвращает количество задач в указанном проекте:

/**
 * Get the number of tasks in a project
 * @param int $projectId
 * @return int
 */
public function getTaskCountByProject($projectId) {

  $stmt = $this->db->prepare('SELECT COUNT(*) 
                             FROM tasks
                             WHERE project_id = :project_id;');
  $stmt->bindParam(':project_id', $projectId);
  $stmt->execute();
  return $stmt->fetchColumn();
}
В этом уроке мы узнали о различных способах запроса данных в базе данных SQLite с использованием PHP PDO.