1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
-
<p>Предположим, что мы решили реализовать сайт с объявлениями и хотим дать возможность создавать их нашим пользователям. К текущему моменту мы уже знаем как вывести страницу с формой для добавления объявления. Но что делать после того, как данные формы придут на сервер? Где их хранить?</p>
1
+
<p>Предположим, что мы решили реализовать сайт с объявлениями и хотим дать возможность создавать их нашим пользователям. К текущему моменту мы уже знаем как вывести страницу с формой для добавления объявл��ния. Но что делать после того, как данные формы придут на сервер? Где их хранить?</p>
2
<p>Самый простой вариант, который можно придумать - файлы. Все, что приходит, можно записывать в файл, а при выводе читать из него. Такой подход обладает бесконечным числом недостатков и абсолютно неудобен в работе. Правильный способ работы с данными - база данных. База данных, в конечном итоге, тоже хранится в файлах, но этим процессом на 100% управляет<strong>СУБД</strong>, так называемая система управления базами данных. Именно ее необходимо установить перед началом работы. В вебе наиболее распространены две системы: PostgreSQL и MySQL. Настройка и установка баз данных - не такой тривиальный процесс, как установка интерпретатора php, поэтому здесь мы его рассматривать не будем. В сети вы можете найти множество готовых рецептов по установке СУБД на вашу операционную систему. Гуглить лучше так:<em>postgresql install ubuntu</em></p>
2
<p>Самый простой вариант, который можно придумать - файлы. Все, что приходит, можно записывать в файл, а при выводе читать из него. Такой подход обладает бесконечным числом недостатков и абсолютно неудобен в работе. Правильный способ работы с данными - база данных. База данных, в конечном итоге, тоже хранится в файлах, но этим процессом на 100% управляет<strong>СУБД</strong>, так называемая система управления базами данных. Именно ее необходимо установить перед началом работы. В вебе наиболее распространены две системы: PostgreSQL и MySQL. Настройка и установка баз данных - не такой тривиальный процесс, как установка интерпретатора php, поэтому здесь мы его рассматривать не будем. В сети вы можете найти множество готовых рецептов по установке СУБД на вашу операционную систему. Гуглить лучше так:<em>postgresql install ubuntu</em></p>
3
<p>СУБД стартует как отдельная программа и живет своей собственной жизнью. Эти системы устроены таким образом, что они могут обслуживать множество разных баз данных. Обычно один сайт использует одну базу данных, но все базы данных разных сайтов могут храниться в одной СУБД (но не обязательно). Взаимодействовать с конкретной базой данных можно двумя способами:</p>
3
<p>СУБД стартует как отдельная программа и живет своей собственной жизнью. Эти системы устроены таким образом, что они могут обслуживать множество разных баз данных. Обычно один сайт использует одну базу данных, но все базы данных разных сайтов могут храниться в одной СУБД (но не обязательно). Взаимодействовать с конкретной базой данных можно двумя способами:</p>
4
<ul><li><p>Запустив REPL базы, который позволяет в интерактивном режиме поработать с командами, записать и прочитать данные, добавить пользователя в систему и так далее. При подключении (или уже после) обязательно выбрать базу данных, с которой вы хотите взаимодействовать:</p>
4
<ul><li><p>Запустив REPL базы, который позволяет в интерактивном режиме поработать с командами, записать и прочитать данные, добавить пользователя в систему и так далее. При подключении (или уже после) обязательно выбрать базу данных, с которой вы хотите взаимодействовать:</p>
5
</li>
5
</li>
6
<li><p>Подключиться к СУБД из своей программы, используя<strong>драйвер</strong>. Драйвер - библиотека, которая общается с базой данных. Она выставляет наружу относительно простой интерфейс для выполнения запросов и получения результатов. Чуть ниже мы посмотрим, как такой подход работает на практике.</p>
6
<li><p>Подключиться к СУБД из своей программы, используя<strong>драйвер</strong>. Драйвер - библиотека, которая общается с базой данных. Она выставляет наружу относительно простой интерфейс для выполнения запросов и получения результатов. Чуть ниже мы посмотрим, как такой подход работает на практике.</p>
7
</li>
7
</li>
8
</ul><h2>Отношения</h2>
8
</ul><h2>Отношения</h2>
9
<p>PostgreSQL и MySQL относятся к классу реляционных баз данных, так как работа этих баз данных основана на реляционной алгебре. Мы не будем погружаться в теоретические дебри. Скажу лишь, что данные в реляционных базах хранятся в виде таблиц. Наверняка вы работали с табличными данными в Microsoft Office или Google Spreadsheets.</p>
9
<p>PostgreSQL и MySQL относятся к классу реляционных баз данных, так как работа этих баз данных основана на реляционной алгебре. Мы не будем погружаться в теоретические дебри. Скажу лишь, что данные в реляционных базах хранятся в виде таблиц. Наверняка вы работали с табличными данными в Microsoft Office или Google Spreadsheets.</p>
10
<p>Каждая таблица в такой базе данных имеет свое имя и набор именованных колонок. Колонки в базе данных обычно называют<strong>полями</strong>. Например, таблица с объявлениями может называться<em>ads</em>и содержать следующие данные:</p>
10
<p>Каждая таблица в такой базе данных имеет свое имя и набор именованных колонок. Колонки в базе данных обычно называют<strong>полями</strong>. Например, таблица с объявлениями может называться<em>ads</em>и содержать следующие данные:</p>
11
<p>Каждая строчка в таблице независима от других и представляет собой законченный набор данных, в нашем случае - одно объявление. Строчки принято называть<strong>записями</strong>.</p>
11
<p>Каждая строчка в таблице независима от других и представляет собой законченный набор данных, в нашем случае - одно объявление. Строчки принято называть<strong>записями</strong>.</p>
12
<p>Обратите внимание на поле<em>id</em>. Его вводят искусственно, для идентификации конкретной строчки. СУБД содержат механизмы, позволяющие генерировать идентификатор автоматически при вставке данных в базу. Как правило, идентификаторы используют в адресах страниц. Например, такой адрес http://myavito.ru/ads/53 выведет объявление с<em>id</em>, равным<em>53</em>.</p>
12
<p>Обратите внимание на поле<em>id</em>. Его вводят искусственно, для идентификации конкретной строчки. СУБД содержат механизмы, позволяющие генерировать идентификатор автоматически при вставке данных в базу. Как правило, идентификаторы используют в адресах страниц. Например, такой адрес http://myavito.ru/ads/53 выведет объявление с<em>id</em>, равным<em>53</em>.</p>
13
<h2>SQL</h2>
13
<h2>SQL</h2>
14
<p>Любые манипуляции c таблицами в реляционных базах данных выполняются с помощью языка запросов<strong>SQL</strong>(structured query language). Открыв REPL базы данных, можно попробовать выполнить следующие запросы (предполагаем, что таблица<em>ads</em>уже создана):</p>
14
<p>Любые манипуляции c таблицами в реляционных базах данных выполняются с помощью языка запросов<strong>SQL</strong>(structured query language). Открыв REPL базы данных, можно попробовать выполнить следующие запросы (предполагаем, что таблица<em>ads</em>уже создана):</p>
15
<p>Как видите, SQL - это простой текст, причем довольно понятный и без лишних пояснений. Конечно, в случае сложных SQL-запросов, придется сильно попотеть, чтобы их понять, но в большинстве случаев SQL получается достаточно простой.</p>
15
<p>Как видите, SQL - это простой текст, причем довольно понятный и без лишних пояснений. Конечно, в случае сложных SQL-запросов, придется сильно попотеть, чтобы их понять, но в большинстве случаев SQL получается достаточно простой.</p>
16
<h2>Драйвер</h2>
16
<h2>Драйвер</h2>
17
<p>Но если внутри REPL базы мы можем выполнять SQL напрямую, то из кода этого не сделать. Необходим драйвер, который передаст наш SQL базе данных и вернет ответ. Но перед тем, как послать запрос, нужно подключиться к самой базе, введя правильное имя пользователя и пароль. СУБД - многопользовательская система с навороченной системой прав. Безопасность при работе с базой - ключевой аспект, так как данные - самое ценное, что есть в приложении. Если потеряются данные, то бизнес, скорее всего, прекратит свое существование.</p>
17
<p>Но если внутри REPL базы мы можем выполнять SQL напрямую, то из кода этого не сделать. Необходим драйвер, который передаст наш SQL базе данных и вернет ответ. Но перед тем, как послать запрос, нужно подключиться к самой базе, введя правильное имя пользователя и пароль. СУБД - многопользовательская система с навороченной системой прав. Безопасность при работе с базой - ключевой аспект, так как данные - самое ценное, что есть в приложении. Если потеряются данные, то бизнес, скорее всего, прекратит свое существование.</p>
18
<p>В стандартную поставку PHP входит библиотека PDO, которая как раз является набором драйверов к разным базам данных. Ниже пример использования:</p>
18
<p>В стандартную поставку PHP входит библиотека PDO, которая как раз является набором драйверов к разным базам данных. Ниже пример использования:</p>
19
<h2>Что нужно выучить</h2>
19
<h2>Что нужно выучить</h2>
20
<p>Напомню, что не нужно расстраиваться, если вы не поняли большинство описанных здесь вещей. Достаточно, что теперь вы осознаете, насколько непросто с наскоку прыгнуть в реальную разработку и нужна предварительная подготовка. Перечислю некоторые новые темы, которые нужно изучить, чтобы без проблем писать код, представленный выше:</p>
20
<p>Напомню, что не нужно расстраиваться, если вы не поняли большинство описанных здесь вещей. Достаточно, что теперь вы осознаете, насколько непросто с наскоку прыгнуть в реальную разработку и нужна предварительная подготовка. Перечислю некоторые новые темы, которые нужно изучить, чтобы без проблем писать код, представленный выше:</p>
21
<ul><li>Базы данных. Необходимо уметь устанавливать и настраивать их. Настройка включает в себя оперирование сокетами (в том числе сетевыми), управление пользователями и многими другими вещами (опять знание операционных систем).</li>
21
<ul><li>Базы данных. Необходимо уметь устанавливать и настраивать их. Настройка включает в себя оперирование сокетами (в том числе сетевыми), управление пользователями и многими другими вещами (опять знание операционных систем).</li>
22
<li>Необходимо знать SQL, что включает в себя и основы теории множеств.</li>
22
<li>Необходимо знать SQL, что включает в себя и основы теории множеств.</li>
23
<li>Понятия нормализации и денормализации. Нормальные формы. Ключи и индексы.</li>
23
<li>Понятия нормализации и денормализации. Нормальные формы. Ключи и индексы.</li>
24
<li>Сериализация и десериализация.</li>
24
<li>Сериализация и десериализация.</li>
25
<li>Идемпотентность.</li>
25
<li>Идемпотентность.</li>
26
<li>Fluent Interface.</li>
26
<li>Fluent Interface.</li>
27
<li>Итератор.</li>
27
<li>Итератор.</li>
28
<li>Безопасность: Экранирование, SQL Injection.</li>
28
<li>Безопасность: Экранирование, SQL Injection.</li>
29
</ul>
29
</ul>