PHP MySQL: запрос информации из базы данных
Работа с базой данных MySQL через PHP открывает широкие возможности для управления информацией. Использование команды SELECT и подготовленного оператора PDO позволяет безопасно извлекать данные и минимизировать риски ошибок.
Дальше вы разберётесь, как составлять точные SELECT-запросы и применять подготовленные выражения PDO в рабочих сценариях. Вы научитесь защищать проект от SQL-инъекций и использовать приёмы, которые ускоряют обращение к базе и повышают стабильность приложения.
PHP-запрос данных MySQL с помощью простого оператора SELECT
Чтобы запросить данные из базы данных MySQL, выполните следующие действия:
Сначала подключитесь к базе данных MySQL.
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);Затем создайте оператор SELECT и выполните его с помощью метода объекта PDO query().
$sql = 'SELECT lastname, firstname, jobtitle
FROM employees
ORDER BY lastname';
$q = $pdo->query($sql);Метод объекта PDO query() возвращает объект PDOStatement или false при ошибке.
Затем с помощью метода setFetchMode() установите режим выборки PDO::FETCH_ASSOC для объекта PDOStatement. Режим PDO::FETCH_ASSOC указывает методу fetch() возвращать набор результатов как массив, проиндексированный по имени столбца с помощью PHP PDO MySQL.
$q->setFetchMode(PDO::FETCH_ASSOC);После этого, используя метод fetch() объекта PDOStatement извлеките каждую строку из набора результатов, пока не останется ни одной строки.
<table class="table table-bordered table-condensed">
<thead>
<tr>
<th>Имя</th>
<th>Фамилия</th>
<th>Должность</th>
</tr>
</thead>
<tbody>
<?php while ($r = $q->fetch()): ?>
<tr>
<td><?php echo htmlspecialchars($r['lastname']) ?></td>
<td><?php echo htmlspecialchars($r['firstname']); ?></td>
<td><?php echo htmlspecialchars($r['jobtitle']); ?></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>Весь код PHP PDO примера будет выглядеть следующим образом:
<?php
require_once 'dbconfig.php';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$sql = 'SELECT lastname,
firstname,
jobtitle
FROM employees
ORDER BY lastname';
$q = $pdo->query($sql);
$q->setFetchMode(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
die("Невозможно соединиться с базой данных $dbname :" . $e->getMessage());
}
?>
<!DOCTYPE html>
<html>
<head>
<title>PHP MySQL Query Data Demo</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
</head>
<body>
<div id="container">
<h1>Сотрудники</h1>
<table class="table table-bordered table-condensed">
<thead>
<tr>
<th>Имя</th>
<th>Фамилия</th>
<th>Должность</th>
</tr>
</thead>
<tbody>
<?php while ($row = $q->fetch()): ?>
<tr>
<td><?php echo htmlspecialchars($row['lastname']) ?></td>
<td><?php echo htmlspecialchars($row['firstname']); ?></td>
<td><?php echo htmlspecialchars($row['jobtitle']); ?></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
</body>
</div>
</html>
Запрос данных PHP MySQL с использованием подготовленного оператора PDO
На практике часто нужно передать из кода значение в PHP PDO query. Например, чтобы получить данные сотрудников, фамилия которых заканчивается на son. Чтобы сделать это безопасно, нужно использовать подготовленный оператор PDO:
<?php
require_once 'dbconfig.php';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$sql = 'SELECT lastname,
firstname,
jobtitle
FROM employees
WHERE lastname LIKE ?';
$q = $pdo->prepare($sql);
$q->execute(['%son']);
$q->setFetchMode(PDO::FETCH_ASSOC);
while ($r = $q->fetch()) {
echo sprintf('%s <br/>', $r['lastname']);
}
} catch (PDOException $pe) {
die("Could not connect to the database $dbname :" . $pe->getMessage());
}Вот, как работает этот скрипт.
- Мы используем в операторе SELECT вопросительный знак (?). PDO заменит вопросительный знак в запросе соответствующим аргументом. Вопросительный знак называется позиционным заполнителем;
- Затем вызываем метод объекта PDO prepare(), чтобы подготовить оператор SQL к выполнению;
- Далее выполняем запрос PHP PDO, вызывая метод объекта PDOStatement - execute(). Кроме этого мы передаем аргумент в виде массива, чтобы заменить позиционный заполнитель в SELECT. После этого SELECT будет переведен в следующий вид:
SELECT lastname,
firstname,
jobtitle
FROM employees
WHERE lastname LIKE '%son';- Устанавливаем режим извлечения для объекта PDOStatement;
- Получаем результаты выборки и отображаем поле фамилии.
PHP предоставляет еще один способ использования заполнителей в подготовленном операторе, который называется именованный заполнитель. Преимущества использования именованного заполнителя:
- Имеет более описательный характер;
- Если в операторе SQL имеется несколько заполнителей, то так проще передать аргументы методу execute().
Рассмотрим следующий PHP PDO пример:
<?php
require_once 'dbconfig.php';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$sql = 'SELECT lastname,
firstname,
jobtitle
FROM employees
WHERE lastname LIKE :lname OR
firstname LIKE :fname;';
// готовим оператор к выполнению
$q = $pdo->prepare($sql);
// передаем значения в запрос и выполняем его
$q->execute([':fname' => 'Le%',
':lname' => '%son']);
$q->setFetchMode(PDO::FETCH_ASSOC);
// выводим набор результатов
while ($r = $q->fetch()) {
echo sprintf('%s <br/>', $r['lastname']);
}
} catch (PDOException $e) {
die("Could not connect to the database $dbname :" . $e->getMessage());
}:lname и :fname - это именованные заполнители. Они заменяются соответствующими аргументами в ассоциативном массиве, который мы передаем методу execute.
Из этой статьи вы узнали, как выполнять запросы к базе данных с помощью PHP PDO MySQL.
Комментарии