В нашем мире опасность всегда угрожает тем, кто ее боится (Б. Шоу).

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

3 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
4 июля 2019
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.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 25

Если статья понравилась, то поделитесь ей в социальных сетях:

Отправить ответ

Войти с помощью: 
avatar
  Подписаться  
Уведомление о

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close