Описание : в этой статье вы узнаете, как запрашивать данные из базы данных MySQL с помощью PHP PDO. Вы также узнаете, как использовать подготовленный оператор PDO для безопасного выбора данных.
Чтобы запросить данные из базы данных 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 в оператор 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 lastname, firstname, jobtitle FROM employees WHERE lastname LIKE '%son';
PHP предоставляет вам другой способ использования заполнителей в подготовленном выражении, называемом именованным заполнителем. Преимущества использования названного заполнителя:
Давайте посмотрим на следующий пример:
<?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.