• доступно о веб-разработке
15.11.2012 Базы Данных, Технологии

Обработка результата запроса / Неделя MySQL

Мы сделали то, что хотели. Отправили запрос в базу данных для того, чтобы получить результат. База данных призадумалась на тысячные доли секунды, сделала выборку и готова отдать нам то, что вы хотели. Вы получаете результат, но как его превратить в нужную информационную структуру типа массива? Об этом и пойдет речь в данной статье.

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

$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);

Первая строка, думаю, понятна уже всем.

Мы создаем объект PDO с заданными параметрами подключения.

Во второй строчке мы отправляем запрос в БД через метод PDO ->query(), отправляя ему код запроса в качестве аргумента.

В переменную $statement записывается результат ответа в виде объекта.

В третьей строке мы используем метод полученного объекта fetch превращая полученные данные (точнее 1 запись) в массив.

Ну и в последней строке выводим, обрабатывая специальной функцией htmlentities, выводим значение элемента массива по ключу _message, который соответствует одноименному полю таблицы.

Как узнать, какими методами обладает объект класса PDO и порождаемые им объекты?

Как всегда, пользуемся поиском и находим полной рассказ об этом классе в официальной документации PHP:

http://www.php.net/manual/ru/class.pdo.php

Чтобы узнать, что возвращает метод ->query() смотрим его документацию:

http://www.php.net/manual/ru/pdo.query.php

Как видно, метод можно использовать передавая ему разное количество аргументов:

PDOStatement PDO::query ( string $statement )
PDOStatement PDO::query ( string $statement , int $PDO::FETCH_COLUMN , int $colno )
PDOStatement PDO::query ( string $statement , int $PDO::FETCH_CLASS , string $classname , array $ctorargs )
PDOStatement PDO::query ( string $statement , int $PDO::FETCH_INTO , object $object )
А вот то, что идет перед методом — это класс возвращаемого объекта — PDOStatement:
http://www.php.net/manual/ru/class.pdostatement.php
Также смотрим значение метода этого класса ->fetch():
http://www.php.net/manual/ru/pdostatement.fetch.php
Этот метод извлекает из результата ответа одну запись.
А вот есть и метод, который позволяет все полученные записи сразу же в один массив перегнать ->fetchAll():
http://www.php.net/manual/ru/pdostatement.fetchall.php
Задание следующее.
Попробуйте подключиться к созданной вчера базе данных при помощи полученных сегодня знаний и получить ответ, отобразить результат.
Как посмотреть содержимое массива? Я для этого обычно использую удобную функцию:
<?php

function debug($data){
    echo '<pre>';
    var_dump($data);
    echo '</pre>';
}
Подумайте, зачем здесь используется тег <pre>? Найдите информацию о нем и попробуйте посмотреть содержимое полученного массива с обрамлением этим тегом и без него.

Поделиться

Комментарии Правила дискуссии

Читайте ранее:
Запросы / Неделя MySQL

У всех у нас разные запросы. Кому-то хватает немногого, а иному — подавай все самое лучшее. Точно также и наши...

Закрыть