PHP работа с базами данных
Что такое база данных MySQL
База данных представляет собой систему храниения данных, которая включает в себя также и механизм контроля доступа к данным, систему управления этими данными.
Каждая база данных поддерживает один или несколько программных интерфейсов (API) для разных языков программирования.
Библиотеки API предназначены для обеспечения доступа ко всем функциям базы, таким как: создание, удаление, модификация баз данных, доступа к данным, поиска и репликации данных и др..
В принципе, для хранения данных могут быть использованы и другие способы. Например: файлы в файловой системе, таблицы в памяти. Но база данных предоставляет несравнимо больше возможностей для выборки и обработки больших массивов данных, скорость обработки и защищённость данных.
В настоящее время для хранения и управления большими массивами информации используются:
реляционные системы управления базами данных (RDBMS Relational Database Management System).
Все данные в такой системе хранятся в разных таблицах и отношения между ними устанавливаются с использованием различного типа ключей. Иногда называют SQL - базы данных.
MySQL - популярная система управления базами данных. Практически все языки программирования поддерживают API для работы с MySQL.
Самое популярное сочетание для современных WEB разработок - это язык программирования PHP и MySQL в качестве системы управления базами данных.
MySQL использует стандартные запросы языка SQL (Structured Query Languagequeries) для манипуляций с данными.
Терминология
- Database: реляционная база данных, которая представляет собой набор таблиц с данными.
- Table: таблица, еоторая представляет собой матрицу с данными, состоит из рядов и колонок.
- Column: один столбец (data element) содержит данные одного и того же типа, например: столбец - почтовый индекс.
- Row: строка таблицы в базе данных представляет собой группу связанных данных, например данные одного клиента.
- Primary Key: первичный ключ, коорый является уникальным. С помощью ключа можно быстро найти нужную строку.
- Foreign Key: внешний ключ связывает данные из разных таблиц.
- Compound Key: комбинированный ключ (composite key) является ключом , который состоит из нескольких колонок.
Работа с MySQL через WEB интерфейс - phpMyAdmin
PhpMyAdmin - это самый популярный сегодня, бесплатный программный инструмент - графический WEB интерфейс, написанный на PHP, предназначенный для управления бзами данных MySQL через интернет.
PhpMyAdmin поддерживает широкий спектр операций с базами данных MySQL. Часто используемые операции (управление базами данных, таблицы, столбцы, отношения, индексы, пользователи, разрешения и т. Д.)
могут выполняться как через пользовательский интерфейс так и через SQL - запросы.
PHP - MySQL драйверы и плагины
Язык PHP предоставляетрасширения для работы с различными базами данных. В том числе - MySQL.
API предоставляет на выбор три набора инструментов для подключения к серверу баз данных MySQL:
- Расширение PHP MySQL
- Расширение PHP MySQLi
- Объекты данных PHP (PDO)
Наиболее часто сегодня используется MySQLi.
Расширение MySQLi, или как его еще называют улучшенное (improved) MySQL расширение, было разработано, чтобы дать возможность программистам в полной мере воспользоваться функционалом MySQL сервера версий 4.1.3 и выше.
Расширение mysqli включается в поставку PHP версий 5 и выше.
Объекты данных PHP, или PDO, представляют из себя абстракцию коннектора баз данных для PHP приложений. PDO предоставляет API интерфейс взаимодействия с базой данных, не зависящий от конкретной СУБД.
Теоретически, при использовании PDO можно поменять сервер баз данных, например с Firebird на MySQL, и это приведет лишь к незначительным изменениям в PHP коде.
Создание базы данных
База данных в MySQL - это набор таблиц и связей между ними.
Для управления этой базой данных создаётся пользователь с определённым набором прав на неё. Когда на сервер ставится MySQL, он создаёт единственного пользователя
root с максимальными правами. Далее можно управлять пользователями, создавать новых, удалять, менять права. Обычная практика: дл каждой базы данных создаётся свой пользователь.
Для проведения любых операций нужно изначально подключиться к MySQL серверу, используя учётные данные пользователя, имеющего право на проведение этих операций.
Каждое действие с данными проводит SQL запрос (SQL query), который даёт команду серверу.
Основные команды
- SELECT - извлекает данные из базы данных
- UPDATE - обновляет данные в базе данных
- DELETE - удаляет данные из базы данных
- INSERT INTO - вставляет новые данные в базу данных
- CREATE DATABASE - создает новую базу данных
- ALTER DATABASE - изменяет базу данных
- CREATE TABLE - создает новую таблицу
- ALTER TABLE - изменяет таблицу
- DROP TABLE - удаляет таблицу
- CREATE INDEX - создает индекс (ключ поиска)
- DROP INDEX - удаляет индекс
Примеры стандартных SQL запросов
Предположим, что наш MySQL server установлен на localhost (тот же компьютер, на котором запускается PHP программа, обращающаяся к этому серверу).
Пользователь, имеющий полные права на управление сервером - root, с паролем Test12345.
Создадим базу данных Students вот такой структуры:
ID |
Имя |
Дата регистрации |
Курс |
|
|
|
|
|
|
|
|
|
|
|
|
Для этого:
- подключаемся с серверу MySQL
- создаём пользователя и базу данных, даём пользователю полные права на эту БД
- создаём в БД таблицу.
Используем методы MySQLi. Для создания баз подключаемся к серверу с данными пользователя, имеющего право создавать базы данных (сейчас - root nr как никаких других мы не создавали).
Подключаемся к MySQL серверу из PHP программы,
$servername = "localhost";
$username = "root";
$password = "Test12345";
$dbname = "Students";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
созданём базу данных Students
// Create database
$sql="CREATE DATABASE $dbname CHARACTER SET utf8 COLLATE utf8_general_ci";
if (mysqli_query($conn, $sql)) {
echo "Database <b>$dbname</b> created successfully";
} else {
echo "Error creating database: " . mysqli_error($conn);
}
Созданём пользователя и даём ему права на базу данных
Создаём таблицу
PDO
Основные типы даннх
Числовые типы данных
Тип данных |
Объем памяти байт
|
Диапазон |
Описание |
TINYINT (M) |
1 |
от -128 до 127 или от 0 до 255 |
Целое. Может быть объявлено UNSIGNED. Необязательный параметр М - количество отводимых под число символов. Необязательный атрибут ZEROFILL позволяет свободные позиции по умолчанию заполнить нулями.
TINYINT - число в диапазоне от -128 до 127.
TINYINT UNSIGNED - число в диапазоне от 0 до 255.
TINYINT (3) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 002. |
SMALLINT (M) |
2 |
от -32768 до 32767 или от 0 до 65535 |
SMALLINT - целое число в диапазоне от -32768 до 32767.
SMALLINT UNSIGNED - целое число в диапазоне от 0 до 65535.
SMALLINT (4) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 0002. |
MEDIUMINT (M) |
3 |
от -8388608 до 8388608 или от 0 до 16777215 |
MEDIUMINT - целое число в диапазоне от -8388608 до 8388608.
MEDIUMINT UNSIGNED - целое число в диапазоне от 0 до 16777215.
MEDIUMINT (5) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 00002. |
INT (M) или INTEGER (M) |
4 |
от -2147683648 до 2147683648 или от 0 до 4294967295 |
INT - хранит целое число в диапазоне от -2147683648 до 2147683648.
INT UNSIGNED - целое число в диапазоне от 0 до 4294967295.
INT (5) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 00002. |
BIGINT (M) |
8 |
от -263 до 263-1 или от 0 до 264 |
BIGINT - целое число в диапазоне от -263до 263-1.
BIGINT UNSIGNED - целое число в диапазоне от 0 до 264.
BIGINT (7) ZEROFILL - свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 0000002. |
BOOL или BOOLEAN |
1 |
либо 0, либо 1 |
Булево значение. 0 - ложь (false), 1 - истина (true). |
DECIMAL (M,D) или DEC (M,D) или NUMERIC (M,D) |
M + 2 |
зависят от параметров M и D |
Используются для величин повышенной точности, например, для денежных данных. M - количество отводимых под число символов (максимальное значение - 64). D - количество знаков после запятой (максимальное значение - 30).
DECIMAL (5,2) - будет хранить числа от -99,99 до 99,99. |
FLOAT (M,D) |
4 |
мин. значение +(-) 1.175494351 * 10-39
макс. значение +(-) 3. 402823466 * 1038 |
Вещественное число (с плавающей точкой). Может иметь параметр UNSIGNED, запрещающий отрицательные числа, но диапазон значений от этого не изменится. M - количество отводимых под число символов. D - количество символов дробной части.
FLOAT (5,2) - будет хранить числа из 5 символов, 2 из которых будут идти после запятой (например: 46,58). |
DOUBLE (M,D) |
8 |
мин. значение +(-) 2.2250738585072015 * 10-308
макс. значение +(-) 1.797693134862315 * 10308 |
DOUBLE - большие дробные числа. |
Строковые типы данных
Тип данных |
Объем памяти символов
|
Максимальный размер символов
|
Описание |
CHAR (M) |
M |
М |
Позволяет хранить строку фиксированной длины М. Значение М - от 0 до 65535.
CHAR (8) - хранит строки из 8 символов и занимает 8 байтов. Например, любое из следующих значений: '', 'Иван','Ирина', 'Сергей' будет занимать по 8 байтов памяти. А при попытке ввести значение 'Александра', оно будет усечено до 'Александ', т.е. до 8 символов. |
VARCHAR (M) |
L+1 |
М |
Позволяет хранить переменные строки длиной L. Значение М - от 0 до 65535.
VARCHAR (3) - хранит строки максимум из 3 символов, но пустая строка '' занимает 1 байт памяти, строка 'a' - 2 байта, строк 'aa' - 3 байта, строка 'aaa' - 4 байта. Значение более 3 символов будет усечено до 3. |
BLOB, TEXT |
L+2 |
216-1 |
Позволяют хранить большие объемы текста. Причем тип TEXT используется для хранения именно текста, а BLOB - для хранения изображений, звука, электронных документов и т.д. |
MEDIUMBLOB, MEDIUMTEXT |
L+3 |
224-1 |
Аналогично предыдущему, но с большим размером. |
LONGBLOB, LONGTEXT |
L+4 |
232-1 |
Аналогично предыдущему, но с большим размером. |
ENUM ('value1', 'value2',...,'valueN') |
1 или 2 байта |
65535 элементов |
Строки этого типа могут принимать только одно из значений указанного множества.
ENUM ('да', 'нет') - в столбце с таким типом может храниться только одно из имеющихся значений. Удобно использовать, если предусмотрено, что в столбце должен храниться ответ на вопрос. |
SET ('value1', 'value2',...,'valueN') |
до 8 байт |
64 элемента |
Строки этого типа могут принимать любой или все элементы из значений указанного множества.
SET ('первый', 'второй') - в столбце с таким типом может храниться одно из перечисленных значений, оба сразу или значение может отсутствовать вовсе. |
Календарные типы данных
Тип данных |
Объем памяти байт
|
Диапазон |
Описание |
DATE |
3 |
от '1000-01-01' до '9999-12-31' |
Предназначен для хранения даты. В качестве первого значения указывается год в формате "YYYY", через дефис - месяц в формате "ММ", а затем день в формате "DD". В качестве разделителя может выступать не только дефис, а любой символ отличный от цифры. |
TIME |
3 |
от '-838:59:59' до '838:59:59' |
Предназначен для хранения времени суток. Значение вводится и хранится в привычном формате - hh:mm:ss, где hh - часы, mm - минуты, ss - секунды. В качестве разделителя может выступать любой символ отличный от цифры. |
DATATIME |
8 |
от '1000-01-01 00:00:00' до '9999-12-31 23:59:59' |
Предназначен для хранения и даты и времени суток. Значение вводится и хранится в формате - YYYY-MM-DD hh:mm:ss. В качестве разделителей могут выступать любые символы отличные от цифры. |
TIMESTAMP |
4 |
от '1970-01-01 00:00:00' до '2037-12-31 23:59:59' |
Предназначен для хранения даты и времени суток в виде количества секунд, прошедших с полуночи 1 января 1970 года (начало эпохи UNIX). |
YEAR (M) |
1 |
от 1970 до 2069 для М=2 и от 1901 до 2155 для М=4 |
Предназначен для хранения года. М - задает формат года. Например, YEAR (2) - 70, а YEAR (4) - 1970. Если параметр М не указан, то по умолчанию считается, что он равен 4. |
Тип данных NULL
NOT NULL (значение не может отсутствовать) для полей логин и пароль,
NULL (значение может отсутствовать) для полей дата рождения и пол.
По умолчанию всем столбцам присваивается тип NOT NULL, поэтому его можно явно не указывать.
Пример:
create table users (login varchar(20), password varchar(15), sex enum('man', 'woman') NULL, date_birth date NULL);
Таким образом создаем таблицу с 4 столбцами:
логин (не более 20 символов) обязательное,
пароль (не более 15 символов) обязательное,
пол (мужской или женский) не обязательное,
дата рождения (тип дата) необязательное.