PHP MySQL. Запрос данных из базы данных

Описание : в этой статье вы узнаете, как запрашивать данные из базы данных MySQL с помощью PHP PDO. Вы также узнаете, как использовать подготовленный оператор PDO для безопасного выбора данных.
PHP MySQL Запрос данных с помощью простого оператора SELECT
Чтобы запросить данные из базы данных MySQL, выполните следующие действия:
Сначала подключитесь к базе данных MySQL.
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
Затем создайте оператор SELECT и выполните его, используя метод query() объекта PDO.
$sql = 'SELECT lastname, firstname, jobtitle FROM employees ORDER BY lastname'; $q = $pdo->query($sql);
Метод query() объекта PDO возвращает объект PDOStatement, или false в случае неудачи.
Затем установите режим выборки PDO::FETCH_ASSOC для объекта PDOStatement с помощью метода setFetchMode(). Режим PDO::FETCH_ASSOC инструктирует метод fetch() возвращать результирующий набор в виде массива, индексированного имени столбца.
$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
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>Employees</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 в оператор SQL, например, получаем сотрудника, чья фамилия заканчивается на кий. Чтобы сделать это безопасно и избежать атаки SQL-инъекцией, вам нужно использовать подготовленный оператор 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(['%кий']);
$q->setFetchMode(PDO::FETCH_ASSOC);
while ($r = $q->fetch()) {
echo sprintf('%s <br/>', $r['lastname']);
}
} catch (PDOException $pe) {
die("Не удалось подключиться к базе данных $dbname :" . $pe->getMessage());
}
Как работает скрипт
- Сначала мы используем знак вопроса (?) в утверждении SELECT. PDO заменит вопросительный знак в запросе соответствующим аргументом. Знак вопроса называется позиционным заполнителем.
- Далее мы вызываем метод prepare() объекта PDO для подготовки оператора SQL к выполнению.
- Затем мы выполняем инструкцию, вызывая метод execute() объекта PDOStatement. Кроме того, мы передаем аргумент в виде массива, чтобы заменить заполнитель в заявление SELECT. Таким образом, заявление SELECT будет переведено следующим образом:
SELECT lastname, firstname, jobtitle FROM employees WHERE lastname LIKE '%son';
- После этого мы устанавливаем режим выборки для объекта PDOStatement.
- Наконец, мы выбираем каждую строку набора результатов и отображаем поле фамилии.
PHP предоставляет вам другой способ использования заполнителей в подготовленном выражении, называемом именованным заполнителем. Преимущества использования названного заполнителя:
- Более описательный.
- Если оператор SQL имеет несколько заполнителей, легче передать аргументы методу execute().
Давайте посмотрим на следующий пример:
<?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.
Из этой статьи вы узнали, как запрашивать данные из базы данных MySQL с использованием объектов PDO.