Данный урок - продолжение предыдущей темы про работу с базами данных. Сейчас мы с вами научимся получать, добавлять и удалять данные с помощью SQL.

Команда SELECT - выборка из БД

Разберемся теперь с командой SELECT, которую вы уже видели в тестовом коде.

Команда SELECT позволяет нам достать несколько строк из нашей таблицы.

Синтаксис ее таков:

//ВЫБРАТЬ все_столбцы ИЗ таблицы_такой_то ГДЕ условие_такое_то
SELECT * FROM имя_таблицы WHERE условие_по_которому_следует_выбрать_строки;

Далее я привожу полный код примера, то есть весь код, который должен быть у вас в документе. Часть этого кода вы уже набрали, когда тестировали работу с базой.

Итак, пример выборки из БД по какому-либо условию, в нашем случае это условие id>0, то есть выбрать все записи, id которых больше нуля:

<?php
	//Устанавливаем доступы к базе данных:
		$host = 'localhost'; //имя хоста, на локальном компьютере это localhost
		$user = 'root'; //имя пользователя, по умолчанию это root
		$password = ''; //пароль, по умолчанию пустой
		$db_name = 'test'; //имя базы данных

	//Соединяемся с базой данных используя наши доступы:
		mysqli_connect($host, $user, $password, $db_name) or die(mysqli_error($link));

	//Устанавливаем кодировку (не обязательно, но поможет избежать проблем):
		mysqli_query($link, "SET NAMES 'utf8'")
	//ВЫБРАТЬ все_столбцы ИЗ workers ГДЕ ад_ди_больше_нуля (т.е. все)
		$query = "SELECT * FROM workers WHERE id > 0";

	//Делаем запрос к БД, результат запроса пишем в $result:
		$result = mysqli_query($link, $query) or die( mysqli_error($link) );

	//Преобразуем то, что отдала нам база в нормальный массив PHP $data:
		for ($data = []; $row = mysqli_fetch_assoc($result); $data[] = $row);

	//Массив результата лежит в $data, выведем его на экран:
		var_dump($data); 
?>

Запрос мы делаем к нашей таблице workers.

Функция var_dump покажет нам, что в массиве $data лежат все строки нашей таблицы.

Впредь я не буду приводить полный код, а буду писать только содержимое переменной $query (то есть текст запроса).

Что можно писать в условие?

Привожу минимум необходимых команд, на самом деле их больше, но о них ниже: = равно, != не равно, <> так тоже не равно, > больше, < меньше, >= больше либо равно, <= меньше либо равно.

Примеры работы с SELECT

Давайте разберем примеры более сложных запросов с SELECT.

Выберем из нашей тестовой таблицы workers работника с id равным 2:

<?php
	//В $data будет лежать одна строка с данными на Петю:
	$query = "SELECT * FROM workers WHERE id=2";
?>

Выберем из нашей таблицы workers работников с id больше 2:

<?php
	//В $data будут все работники, кроме первого и второго:
	$query = "SELECT * FROM workers WHERE id>2";
?>

Выберем из нашей таблицы workers работников с id больше 2 включительно:

<?php
	//В $data будут все работники, кроме первого:
	$query = "SELECT * FROM workers WHERE id>=2";
?>

Выберем из нашей таблицы workers работников с id, не равным 2:

<?php
	//В $data будут все работники кроме Пети (потому что у него id равен 2):
	$query = "SELECT * FROM workers WHERE id != 2";
?>

Выберем из нашей таблицы workers работников возрастом 23 года:

<?php
	//В $data будут Дима и Вася:
	$query = "SELECT * FROM workers WHERE age=23";
?>

Выберем из нашей таблицы workers работников с зарплатой 500$:

<?php
	//В $data будут Петя, Вася и Иван:
	$query = "SELECT * FROM workers WHERE salary=500";
?>

Выберем из нашей таблицы workers работника с именем Дима:

<?php
	//В $data будет только Дима:
	$query = "SELECT * FROM workers WHERE name='Дима'";

	/*
		Обратите внимание на кавычки: 
		поскольку вся строка запроса у нас лежит в двойных 
		кавычках, то строку 'Дима' мы возьмем в одинарные!
	*/
?>

Более сложная логика: OR и AND

В условии выборки можно делать более сложные комбинации с помощью слов OR (или) и AND (и).

Работают они так же, как и их аналоги в конструкции if.

Примеры на OR и AND

Выберем из таблицы workers работников с зарплатой 500$ И возрастом 23 года:

<?php
	//В $data будет только Вася (только он подпадает под два условия сразу)
	$query = "SELECT * FROM workers WHERE salary=500 AND age=23";
?>

Выберем из таблицы workers работников с зарплатой 500$ ИЛИ возрастом 23 года:

<?php
	/*
		В $data будут все работники у кого з/п 500$ 
		и все у кого возраст 23 года.

		Это Дима (23 года), Вася (оба условия), 
		Петя (з/п 500$) и Иван (з/п 500$).
	*/
	$query = "SELECT * FROM workers WHERE salary=500 OR age=23";
?>

Выберем из таблицы workers работников с зарплатой от 450$ до 900$:

<?php
	//В $data будут Петя (з/п 500$), Вася (з/п 500$), Иван (з/п 500$):
	$query = "SELECT * FROM workers WHERE salary>450 AND salary<900";
?>

Выберем из таблицы workers работников с возрастом от 23 до 27 лет включительно:

<?php
	/*
		В $data будут Дима (23 года), Петя (25 лет),
 		Вася (23 года), Иван (25 лет),
		а вот Коля (30 лет) и Кирилл (28 лет) сюда не попадут:
	*/
	$query = "SELECT * FROM workers WHERE age>=23 AND age<=27";
?>

Группировки условий

Если вам нужны сложные комбинации команд OR и AND то, так же, как в if, их можно группировать с помощью круглых скобок ( ), чтобы показать приоритет условий.

Давайте выберем всех работников в возрасте от 20 лет до 27 лет или с зарплатой от 300$ (обратите внимание на расстановку скобок () - именно они группируют условия):

SELECT * FROM workers WHERE (age>20 AND age<27) OR (salary>300)

Выбор столбцов

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

Пусть мы хотим узнать только имя и возраст работника, не вытягивая из базы данных всю остальную информацию:

<?php
	/*
		В $data будут только ключи name и age и не будет id, salary
		(звездочка *, которую мы ставили раньше, командует вернуть ВСЕ столбцы):
	*/
	$query = "SELECT name, age FROM workers WHERE id>0";
?>

Команда INSERT - вставка данных в БД

С помощью команды INSERT можно добавлять новую информацию в таблицу.

Синтаксис такой:

//ВСТАВИТЬ В имя_таблицы УСТАНОВИТЬ поле1=значение1, поле2=значение2, поле3=значение3
INSERT INTO имя_таблицы SET поле1=значение1, поле2=значение2, поле3=значение3...;

Давайте добавим нового работника Гену, в возрасте 30 лет, с зарплатой 1000$:

<?php
	//ВСТАВИТЬ В имя_таблицы УСТАНОВИТЬ имя='Гена', возраст=30, зарплата=1000
	$query = "INSERT INTO workers SET name='Гена', age=30, salary=1000";

	/*
		Обратите внимание на то, что строку 'Петя'  мы взяли в кавычки.
		Также обратите внимание на то, что поле id мы не указываем - 
		база данных сама поставит в него нужное значение.
	*/
?>

Результат данного действия нужно смотреть в PhpMyAdmin. Не забудьте обновить страницу с таблицей.

<?php
	//В $data будет только Вася (только он подпадает под два условия сразу)
	$query = "SELECT * FROM workers WHERE salary=500 AND age=23";
?>

Что будет, если не указать значение какого-либо столбца?

<?php
	//ВСТАВИТЬ В имя_таблицы УСТАНОВИТЬ имя='Гена', зарплата=1000
	$query = "INSERT INTO workers SET name='Гена', salary=1000";

	//Мы не выставили поле "возраст", хотя оно есть в таблице!
?>

Ошибки в данном случае не будет. База данных просто поставит значение по умолчанию для данной колонки. В нашем случае это будет ноль. Проверьте это!

Другой синтаксис INSERT

INSERT имеет альтернативный синтаксис:

<?php
	//ВСТАВИТЬ В имя_таблицы (поле1, поле2...) ЗНАЧЕНИЯ (значение1, значение2...)
	$query = "INSERT INTO workers (поле1, поле2...) VALUES (значение1, значение2...)";
?>

Давайте добавим нового работника Гену, в возрасте 30 лет, с зарплатой 1000$ с помощью альтернативного синтаксиса:

<?php
	//ВСТАВИТЬ В workers (name, age, salary) ЗНАЧЕНИЯ ('Гена', 30, 1000)"
	$query = "INSERT INTO workers (name, age, salary) VALUES ('Гена', 30, 1000)";
?>

Массовая вставка через INSERT

С помощью INSERT можно вставлять не одну запись, а несколько. Синтаксис такой:

<?php
	/*
		ВСТАВИТЬ В имя_таблицы (поле1, поле2...)
 			ЗНАЧЕНИЯ (значение1, значение2...), (значение1, значение2...)...
	*/
	$query = "INSERT INTO имя_таблицы (поле1, поле2...)
		VALUES (значение1, значение2...), (значение1, значение2...)...";
?>

Давайте добавим одновременно трех новых работников: Гену, в возрасте 30 лет, с зарплатой 1000$, Васю, в возрасте 25 лет, с зарплатой 500$, Ивана, в возрасте 27 лет, с зарплатой 1500$:

<?php
	/*
		ВСТАВИТЬ В workers (name, age, salary)
			ЗНАЧЕНИЯ ('Гена', 30, 1000), ('Вася', 25, 500), ('Иван', 27, 1500)
	*/
	$query = "INSERT INTO workers (name, age, salary)
		VALUES ('Гена', 30, 1000), ('Вася', 25, 500), ('Иван', 27, 1500)";
?>

Команда DELETE - удаление записей

С помощью команды DELETE можно удалять записи из таблицы.

Ее синтаксис очень похож на команду SELECT:

<?php
	//УДАЛИТЬ ИЗ таблицы_такой_то ГДЕ условие_такое_то
	"DELETE FROM имя_таблицы WHERE условие_по_которому_следует_удалять_строки";
?>

Давайте удалим запись с id=6:

<?php
	//УДАЛИТЬ ИЗ workers ГДЕ id=6
	$query = "DELETE FROM workers WHERE id=6";

	/*
		Обратите внимание на то,
		что после удаления id=6 в таблице не будет вообще.
	*/
?>