0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><strong>Рассказываем, как работать с PostgreSQL в PHP и что такое модуль PDO.</strong></p>
1
<p><strong>Рассказываем, как работать с PostgreSQL в PHP и что такое модуль PDO.</strong></p>
2
<p>Во время разработки приложений часто нужно подключать и использовать базы данных для хранения информации. Одна из самых распространенных - PostgreSQL. Расскажем, как работать в PHP именно с ней. Для этого мы будем использовать встроенный модуль PHP Data Objects (PDO) - унифицированный интерфейс для работы с базами данных.</p>
2
<p>Во время разработки приложений часто нужно подключать и использовать базы данных для хранения информации. Одна из самых распространенных - PostgreSQL. Расскажем, как работать в PHP именно с ней. Для этого мы будем использовать встроенный модуль PHP Data Objects (PDO) - унифицированный интерфейс для работы с базами данных.</p>
3
<p>Чтобы начать работу с PDO, необходимо поработать с PDO -<a>драйвером</a>конкретной базы данных. Мы будем использовать<a>драйвер для работы с PostgreSQL</a>.</p>
3
<p>Чтобы начать работу с PDO, необходимо поработать с PDO -<a>драйвером</a>конкретной базы данных. Мы будем использовать<a>драйвер для работы с PostgreSQL</a>.</p>
4
<h2>Содержание</h2>
4
<h2>Содержание</h2>
5
<ul><li><a>Активация драйвера PDO_PGSQL</a></li>
5
<ul><li><a>Активация драйвера PDO_PGSQL</a></li>
6
<li><a>Создание структуры проекта PHP с помощью Composer</a></li>
6
<li><a>Создание структуры проекта PHP с помощью Composer</a></li>
7
<li><a>Подключение к базе данных PostgreSQL</a></li>
7
<li><a>Подключение к базе данных PostgreSQL</a></li>
8
<li><a>Создание таблиц с помощью PHP PDO</a></li>
8
<li><a>Создание таблиц с помощью PHP PDO</a></li>
9
<li><a>Добавление данных в таблицу PostgreSQL с помощью PDO</a></li>
9
<li><a>Добавление данных в таблицу PostgreSQL с помощью PDO</a></li>
10
</ul><h2>Активация драйвера PDO_PGSQL</h2>
10
</ul><h2>Активация драйвера PDO_PGSQL</h2>
11
<p>Обычно дистрибутив PHP уже содержит драйвер для работы с PostgreSQL PDO_PGSQL, поэтому настраивать PHP вручную не нужно. Если это не так, драйвер придется активировать вручную. Для этого откроем файл<em>php.ini</em>и отредактируем следующую строку:</p>
11
<p>Обычно дистрибутив PHP уже содержит драйвер для работы с PostgreSQL PDO_PGSQL, поэтому настраивать PHP вручную не нужно. Если это не так, драйвер придется активировать вручную. Для этого откроем файл<em>php.ini</em>и отредактируем следующую строку:</p>
12
<p>;extension=php_pdo_pgsql.dll</p>
12
<p>;extension=php_pdo_pgsql.dll</p>
13
<p>Нужно раскомментировать строку. Для этого удалим точку с запятой (;) в начале строки и перезапустим веб-сервер.</p>
13
<p>Нужно раскомментировать строку. Для этого удалим точку с запятой (;) в начале строки и перезапустим веб-сервер.</p>
14
<p>extension=php_pdo_pgsql.dll</p>
14
<p>extension=php_pdo_pgsql.dll</p>
15
<h2>Создание структуры проекта PHP с помощью Composer</h2>
15
<h2>Создание структуры проекта PHP с помощью Composer</h2>
16
<p>Пакетный менеджер<a>Composer</a>предназначен для управления зависимостями в PHP. Он позволяет подключать к проекту PHP библиотеки и автоматически управлять их обновлением.</p>
16
<p>Пакетный менеджер<a>Composer</a>предназначен для управления зависимостями в PHP. Он позволяет подключать к проекту PHP библиотеки и автоматически управлять их обновлением.</p>
17
<p>С помощью Composer можно формировать структуру проектов. Создадим в каталоге<em>webroot</em>директорию<em>postgresqlphpconnect</em>для хранения файлов проекта. Затем создадим в директории<em>postgresqlphpconnect</em>подкаталог<em>app</em>и файл<em>composer.json</em>. Текст файла будет таким:</p>
17
<p>С помощью Composer можно формировать структуру проектов. Создадим в каталоге<em>webroot</em>директорию<em>postgresqlphpconnect</em>для хранения файлов проекта. Затем создадим в директории<em>postgresqlphpconnect</em>подкаталог<em>app</em>и файл<em>composer.json</em>. Текст файла будет таким:</p>
18
<p>Каждый новый класс в каталоге<em>app</em>автоматически связывается с пространством имен PostgreSQLTutorial.</p>
18
<p>Каждый новый класс в каталоге<em>app</em>автоматически связывается с пространством имен PostgreSQLTutorial.</p>
19
<p>Перейдем в каталог<em>postgresqlphpconnect</em>в терминале и введем команду:</p>
19
<p>Перейдем в каталог<em>postgresqlphpconnect</em>в терминале и введем команду:</p>
20
<p>Composer должен создать файл автозагрузки, загрузить библиотеки, объявленные в файле<em>composer.json</em>, и разместить библиотеки сторонних разработчиков в директории<em>vendor</em>. В нашем примере библиотеки не объявлены, поэтому команда только создает файл автозагрузки.</p>
20
<p>Composer должен создать файл автозагрузки, загрузить библиотеки, объявленные в файле<em>composer.json</em>, и разместить библиотеки сторонних разработчиков в директории<em>vendor</em>. В нашем примере библиотеки не объявлены, поэтому команда только создает файл автозагрузки.</p>
21
<p>Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Generating autoload files</p>
21
<p>Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Generating autoload files</p>
22
<p>Создадим в каталоге<em>postgresqlphpconnect</em>файл<em>index.php</em>, а в каталоге<em>app</em>- файлы<em>Connection.php</em>и<em>database.ini</em>. Структура проекта выглядит следующим образом:</p>
22
<p>Создадим в каталоге<em>postgresqlphpconnect</em>файл<em>index.php</em>, а в каталоге<em>app</em>- файлы<em>Connection.php</em>и<em>database.ini</em>. Структура проекта выглядит следующим образом:</p>
23
<blockquote><h3>Читайте также:</h3>
23
<blockquote><h3>Читайте также:</h3>
24
<p>Вышел PHP 8.2: разбираем<a>главные изменения</a></p>
24
<p>Вышел PHP 8.2: разбираем<a>главные изменения</a></p>
25
</blockquote><h2>Подключение к базе данных PostgreSQL</h2>
25
</blockquote><h2>Подключение к базе данных PostgreSQL</h2>
26
<p><a>Создадим новую базу данных</a>и назовем ее hexlet.</p>
26
<p><a>Создадим новую базу данных</a>и назовем ее hexlet.</p>
27
<p>В файле<em>database.ini</em>будут храниться параметры базы данных PostgreSQL:</p>
27
<p>В файле<em>database.ini</em>будут храниться параметры базы данных PostgreSQL:</p>
28
<p>host=localhost port=5432 database=labels user=postgres password=postgres</p>
28
<p>host=localhost port=5432 database=labels user=postgres password=postgres</p>
29
<p>Создадим в файле<em>Connection.php</em>новый класс Connection.</p>
29
<p>Создадим в файле<em>Connection.php</em>новый класс Connection.</p>
30
<p>Connection - Singleton-класс. Для него можно создать только один экземпляр. Если экземпляр уже существует, класс возвращает его при попытке создания нового экземпляра.</p>
30
<p>Connection - Singleton-класс. Для него можно создать только один экземпляр. Если экземпляр уже существует, класс возвращает его при попытке создания нового экземпляра.</p>
31
<p>Для подключения к базе данных PostgreSQL нужно создать экземпляр класса PDO. Используем метод connect(), чтобы получить из файла<em>database.ini</em>параметры конфигурации базы данных, сформировать строку подключения и передать ее конструктору PDO.</p>
31
<p>Для подключения к базе данных PostgreSQL нужно создать экземпляр класса PDO. Используем метод connect(), чтобы получить из файла<em>database.ini</em>параметры конфигурации базы данных, сформировать строку подключения и передать ее конструктору PDO.</p>
32
<p>Добавим в файл<em>index.php</em>приведенный ниже код:</p>
32
<p>Добавим в файл<em>index.php</em>приведенный ниже код:</p>
33
<p>Если при подключении к серверу базы данных PostgreSQL возникает исключение, PHP возвращает \PDOException. Для решения этой проблемы нужно создать внутри блока try...catch новый объект PDO.</p>
33
<p>Если при подключении к серверу базы данных PostgreSQL возникает исключение, PHP возвращает \PDOException. Для решения этой проблемы нужно создать внутри блока try...catch новый объект PDO.</p>
34
<p>Выполним команду для обновления файлов автозагрузки:</p>
34
<p>Выполним команду для обновления файлов автозагрузки:</p>
35
<p>Для проверки запустим в веб-браузере файл<em>index.php</em>. Чтобы это сделать, можно просто перетащить файл в окно браузера, либо открыть файл с помощью меню "Файл → Открыть".</p>
35
<p>Для проверки запустим в веб-браузере файл<em>index.php</em>. Чтобы это сделать, можно просто перетащить файл в окно браузера, либо открыть файл с помощью меню "Файл → Открыть".</p>
36
<p>Чтобы ознакомиться с возможным исключением, настроим для файла<em>database.ini</em>неправильные параметры. Мы увидим сообщение об ошибке.</p>
36
<p>Чтобы ознакомиться с возможным исключением, настроим для файла<em>database.ini</em>неправильные параметры. Мы увидим сообщение об ошибке.</p>
37
<p>Если неправильно введен пароль, то увидим это сообщение:</p>
37
<p>Если неправильно введен пароль, то увидим это сообщение:</p>
38
<p>Если база данных содержит недостоверные данные, то увидим это сообщение:</p>
38
<p>Если база данных содержит недостоверные данные, то увидим это сообщение:</p>
39
<p>Мы научились подключаться к базе данных PostgreSQL в приложении PHP с помощью PDO API. Далее продолжим использовать класс Connection.</p>
39
<p>Мы научились подключаться к базе данных PostgreSQL в приложении PHP с помощью PDO API. Далее продолжим использовать класс Connection.</p>
40
<blockquote><h3>Читайте также:</h3>
40
<blockquote><h3>Читайте также:</h3>
41
<p>Как настроить VS Code<a>для удобной разработки на PHP</a></p>
41
<p>Как настроить VS Code<a>для удобной разработки на PHP</a></p>
42
</blockquote><h2>Создание таблиц с помощью PHP PDO</h2>
42
</blockquote><h2>Создание таблиц с помощью PHP PDO</h2>
43
<p>Чтобы создать таблицу в базе данных PostgreSQL с помощью PHP PDO, нужно:</p>
43
<p>Чтобы создать таблицу в базе данных PostgreSQL с помощью PHP PDO, нужно:</p>
44
<ul><li>Создать новый объект PDO для подключения к базе данных</li>
44
<ul><li>Создать новый объект PDO для подключения к базе данных</li>
45
<li>Вызвать метод exec() объекта PDO и выполнить оператор CREATE TABLE</li>
45
<li>Вызвать метод exec() объекта PDO и выполнить оператор CREATE TABLE</li>
46
</ul><h3>Пример создания таблицы</h3>
46
</ul><h3>Пример создания таблицы</h3>
47
<p>Мы уже создали базу данных hexlet на сервере баз данных PostgreSQL. В целях демонстрации добавим метки таблиц. Создадим в каталоге<em>app</em>класс PostgreSQLCreateTable.</p>
47
<p>Мы уже создали базу данных hexlet на сервере баз данных PostgreSQL. В целях демонстрации добавим метки таблиц. Создадим в каталоге<em>app</em>класс PostgreSQLCreateTable.</p>
48
<p>Конструктор класса принимает объект PDO в качестве аргумента. Метод createTables() создает в базе данных новые таблицы. Переменная $sql содержит запрос CREATE TABLE. Для выполнения запроса вызовем метод exec() объекта PDO. В файле<em>index.php</em>подключимся к базе данных PostgreSQL и выполним запрос для создания таблиц.</p>
48
<p>Конструктор класса принимает объект PDO в качестве аргумента. Метод createTables() создает в базе данных новые таблицы. Переменная $sql содержит запрос CREATE TABLE. Для выполнения запроса вызовем метод exec() объекта PDO. В файле<em>index.php</em>подключимся к базе данных PostgreSQL и выполним запрос для создания таблиц.</p>
49
<h2>Добавление данных в таблицу PostgreSQL с помощью PDO</h2>
49
<h2>Добавление данных в таблицу PostgreSQL с помощью PDO</h2>
50
<p>Добавим данные в таблицу базы данных:</p>
50
<p>Добавим данные в таблицу базы данных:</p>
51
<ul><li>Создадим новый экземпляр класса PDO для подключения к базе данных PostgreSQL</li>
51
<ul><li>Создадим новый экземпляр класса PDO для подключения к базе данных PostgreSQL</li>
52
<li>Объявим переменную $sql в которую поместим запрос INSERT. Для передачи параметров этому запросу можно присвоить заполнителям имена, например, :param.</li>
52
<li>Объявим переменную $sql в которую поместим запрос INSERT. Для передачи параметров этому запросу можно присвоить заполнителям имена, например, :param.</li>
53
<li>Вызовем метод prepare() объекта PDO и подготовим запрос INSERT. Метод prepare() возвращает объект PDOStatement.</li>
53
<li>Вызовем метод prepare() объекта PDO и подготовим запрос INSERT. Метод prepare() возвращает объект PDOStatement.</li>
54
<li>Вызовем метод bindValue() объекта PDOStatement и передадим значения запросу.</li>
54
<li>Вызовем метод bindValue() объекта PDOStatement и передадим значения запросу.</li>
55
<li>Вызовем метод execute() объекта PDOStatement и выполним запрос INSERT.</li>
55
<li>Вызовем метод execute() объекта PDOStatement и выполним запрос INSERT.</li>
56
</ul><p>Обновление данных выполняется таким же образом, за исключением того, что принято в конце возвращать количество измененных строк. Это делается с помощью метода rowCount().</p>
56
</ul><p>Обновление данных выполняется таким же образом, за исключением того, что принято в конце возвращать количество измененных строк. Это делается с помощью метода rowCount().</p>
57
<p>Вот и все - мы узнали, что такое PHP Data Objects, научились подключаться к базе данных, создавать таблицы, добавлять и модифицировать данные. Если вы хотите более подробно изучить PDO, почитайте<a>документацию PHP</a>.</p>
57
<p>Вот и все - мы узнали, что такое PHP Data Objects, научились подключаться к базе данных, создавать таблицы, добавлять и модифицировать данные. Если вы хотите более подробно изучить PDO, почитайте<a>документацию PHP</a>.</p>
58
<blockquote><h3>Освойте модуль PDO:</h3>
58
<blockquote><h3>Освойте модуль PDO:</h3>
59
<p>На Хекслете есть<a>курс "PHP PDO: Работа с базой данных"</a>. Пройдите его, чтобы научиться работать с PDO и освоить основные способы взаимодействия с базой данных.</p>
59
<p>На Хекслете есть<a>курс "PHP PDO: Работа с базой данных"</a>. Пройдите его, чтобы научиться работать с PDO и освоить основные способы взаимодействия с базой данных.</p>
60
</blockquote>
60
</blockquote>