PHP MySQL: запрос информации из базы данных

Из этой статьи вы узнаете, как с помощью PHP PDO выполнять запрос к базе данных MySQL. А также как использовать подготовленный оператор PDO для безопасного извлечения данных.

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-PDO-SELECT

Запрос данных 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.

Перевод статьи «PHP MySQL: Querying Data from Database» дружной командой проекта Сайтостроение от А до Я.

01 марта 2017 в 08:29
Материалы по теме
{"url":"http://www.fastvps.ru/", "src":"/images/advbanners/fastvps.png", "alt":"Хостинг Fastvps.ru. Наш выбор!"}
Заработок