Курс — «Программирование на PHP8 для начинающих» — #23 Взаимодействие с базами данных. Обработка результатов запросов
Здравствуйте, дорогие друзья.
После выполнения SQL-запросов важно правильно обработать результаты, чтобы использовать их в вашем приложении. PHP предоставляет различные методы для обработки результатов запросов, такие как извлечение данных, перебор строк и обработка ошибок. В этом разделе мы рассмотрим, как обрабатывать результаты запросов с использованием PDO.
Извлечение данных
Для извлечения данных из результата запроса можно использовать методы fetch()
, fetchAll()
, fetchColumn()
и fetchObject()
.
- Использование метода
fetch()
:- Метод
fetch()
извлекает одну строку из результата запроса.
- Метод
1 2 3 4 5 6 |
<?php $stmt = $pdo->query("SELECT * FROM users"); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo "ID: " . $row['id'] . " Name: " . $row['name'] . " Email: " . $row['email'] . "<br>"; } ?> |
2. Использование метода fetchAll()
:
- Метод
fetchAll()
извлекает все строки из результата запроса и возвращает их в виде массива.
1 2 3 4 5 6 7 |
<?php $stmt = $pdo->query("SELECT * FROM users"); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($rows as $row) { echo "ID: " . $row['id'] . " Name: " . $row['name'] . " Email: " . $row['email'] . "<br>"; } ?> |
3. Использование метода fetchColumn()
:
- Метод
fetchColumn()
извлекает значение одного столбца из первой строки результата запроса.
1 2 3 4 5 |
<?php $stmt = $pdo->query("SELECT COUNT(*) FROM users"); $count = $stmt->fetchColumn(); echo "Количество пользователей: " . $count . "<br>"; ?> |
4. Использование метода fetchObject()
:
- Метод
fetchObject()
извлекает одну строку из результата запроса и возвращает её в виде объекта.
1 2 3 4 5 6 |
<?php $stmt = $pdo->query("SELECT * FROM users"); while ($row = $stmt->fetchObject()) { echo "ID: " . $row->id . " Name: " . $row->name . " Email: " . $row->email . "<br>"; } ?> |
Обработка ошибок
Обработка ошибок является важной частью работы с базами данных. PDO предоставляет методы для обработки ошибок, такие как errorInfo()
и errorCode()
.
- Использование метода
errorInfo()
:- Метод
errorInfo()
возвращает массив с информацией об ошибке.
- Метод
1 2 3 4 5 6 7 |
<?php $stmt = $pdo->prepare("SELECT * FROM non_existent_table"); if (!$stmt->execute()) { $errorInfo = $stmt->errorInfo(); echo "Ошибка: " . $errorInfo[2] . "<br>"; } ?> |
2. Использование метода errorCode()
:
- Метод
errorCode()
возвращает код ошибки.
1 2 3 4 5 6 7 |
<?php $stmt = $pdo->prepare("SELECT * FROM non_existent_table"); if (!$stmt->execute()) { $errorCode = $stmt->errorCode(); echo "Код ошибки: " . $errorCode . "<br>"; } ?> |
Пример полного цикла обработки результатов запросов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
<?php // Подключение к базе данных $dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8mb4'; $username = 'root'; $password = ''; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Подключение к базе данных успешно.<br>"; // Создание таблицы $pdo->exec("CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL )"); // Добавление пользователей $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)"); $stmt->bindParam(':name', $name); $stmt->bindParam(':email', $email); $users = [ ['John Doe', 'john@example.com'], ['Jane Smith', 'jane@example.com'], ['Alice Johnson', 'alice@example.com'] ]; foreach ($users as $user) { $name = $user[0]; $email = $user[1]; $stmt->execute(); } echo "Пользователи добавлены успешно.<br>"; // Выборка пользователей с использованием fetch() $stmt = $pdo->query("SELECT * FROM users"); echo "Использование fetch():<br>"; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo "ID: " . $row['id'] . " Name: " . $row['name'] . " Email: " . $row['email'] . "<br>"; } // Выборка пользователей с использованием fetchAll() $stmt = $pdo->query("SELECT * FROM users"); echo "Использование fetchAll():<br>"; $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($rows as $row) { echo "ID: " . $row['id'] . " Name: " . $row['name'] . " Email: " . $row['email'] . "<br>"; } // Выборка количества пользователей с использованием fetchColumn() $stmt = $pdo->query("SELECT COUNT(*) FROM users"); $count = $stmt->fetchColumn(); echo "Количество пользователей: " . $count . "<br>"; // Выборка пользователей с использованием fetchObject() $stmt = $pdo->query("SELECT * FROM users"); echo "Использование fetchObject():<br>"; while ($row = $stmt->fetchObject()) { echo "ID: " . $row->id . " Name: " . $row->name . " Email: " . $row->email . "<br>"; } // Обработка ошибок $stmt = $pdo->prepare("SELECT * FROM non_existent_table"); if (!$stmt->execute()) { $errorInfo = $stmt->errorInfo(); echo "Ошибка: " . $errorInfo[2] . "<br>"; } } catch (PDOException $e) { echo "Ошибка подключения: " . $e->getMessage(); } ?> |
Обработка результатов запросов является важной частью взаимодействия с базами данных. PDO предоставляет мощные и гибкие инструменты для извлечения данных, перебора строк и обработки ошибок. Использование этих методов помогает обеспечить корректную работу с данными и делает ваше приложение более надежным и защищенным.
На этом все. Всем хорошего дня!
Цикл статей по курсу — «Программирование на PHP8 для начинающих».