HTML Diff
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>