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 примера будет выглядеть следующим образом:

<?phprequire_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: запрос информации из базы данных

Запрос данных PHP MySQL с использованием подготовленного оператора PDO

На практике часто необходимо передать из кода значение в PHP PDO query. Например, чтобы приобрести данные сотрудников, фамилия которых заканчивается на son. Чтобы сделать это безопасно, необходимо использовать подготовленный оператор PDO:

<?phprequire_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 employeesWHERE lastname LIKE '%son';
  • Устанавливаем режим извлечения для объекта PDOStatement ;
  • Получаем результаты выборки и отображаем поле ввода фамилии.

PHP предлагает ещё один метод использования заполнителей в подготовленном операторе, который называется именованный заполнитель. Преимущества использования именованного заполнителя:

  • Имеет в себя более описательный характер;
  • Если в операторе SQL имеется пару заполнителей, то так проще передать аргументы способу execute() .

Рассмотрим следующий PHP PDO пример:

<?phprequire_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 .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *