Получение выборки данных из БД в PHP онлайн урок.


В этом уроке мы рассмотрим получение данных из базы данных в PHP и выведение их на экран. Для этого используем уже существующие таблицы student, group, teacher.

Для начала, создадим подключение к серверу базы данных:


$dsn = 'mysql:host=localhost; dbname=my_db';
$user = 'root';
$password = '';
try {
  $dbh = new PDO($dsn, $user, $password);
  var_dump($dbh); // object(PDO)#1 (0) { }
} catch (PDOException $e) {
  echo $e->getMessage();
}



Далее, нам необходимо осуществить запрос в базу данных для получения выборки. Для этого потребуется создать специальное утверждение (statement) - объект, который будет содержать сам запрос. Этот объект можно получить, используя, в частности, метод query() уже созданного объект подключения к базе данных.

$sth = $dbh->query('SELECT * FROM student LIMIT 3');

Этот объект имеет перечень методов, которые уже позволят нам получить сами данные. Рассмотрим методы fetch() и fetchAll() которые используются для получения данных. В качестве аргумента для этих методов необходимо указать константу, которая отвечает за формат, в котором будут возвращены значения.

$students = $sth->fetchAll(PDO::FETCH_ASSOC);

В данном случае была использована константа PDO класса PDO::FETCH_ASSOC, использование которой означает, что выборка будет преобразована в ассоциативный массив с ключами в виде полей и со значениями в виде значений полей.

Переменная $student будет содержать массив:

Array
(
[0] => Array
(
[id] => 1
[name] => Mike
[age] => 25
[phone] => 345-65-78
[group_id] => 2
)

[1] => Array
(
[id] => 2
[name] => John
[age] => 27
[phone] => 123-65-12
[group_id] => 1
)

[2] => Array
(
[id] => 4
[name] => Andy
[age] => 20
[phone] => 244-34-12
[group_id] => 3
)

)

Метод fetch() отличается от fetchAll() лишь тем, что вернет данные, которые соответствуют лишь одной записи таблицы.

Отметим еще несколько констант для определения формата выборки в PHP:

  • PDO::FETCH_NUM - для массива, ключи которого - это номера полей

  • PDO::FETCH_BOTH - для массива с индексами как в виде названий полей, так и их номеров

  • PDO::FETCH_OBJ - для объекта класса stdClass со свойствами в виде имен полей


Необходимо заметить, что PDO позволяет превращать любые ошибки при работе с базой данных в исключения. Для этого необходимо записать инструкцию

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

В данном случае режим обработки ошибок переключен в режим исключений. Тогда все действия с объектом подключения и утверждениями необходимо осуществлять внутри конструкции try
try {
  $dbh = new PDO($dsn, $user, $password);
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $sth = $dbh->query('SELECT * FROM student LIMIT 3');
  $students = $sth->fetchAll(PDO::FETCH_OBJ);
  print_r($students);
} catch (PDOException $e) {
  echo $e->getMessage();
}


Проверьте свои знания
Получить выборку по всей таблице со странами country. Вывести соответствующий массив на экран