Извлечение строк без цикла

Задача
Необходимо найти короткий путь выполнения запросов и извлечения данных.

Решение
В случае PEAR DB для извлечения первой (или единственной) строки из запроса используйте метод DB::getRow():

$row = $dbh->getRow("SELECT planet,symbol FROM zodiac
WHERE sign LIKE 'Pisces'");

Для извлечения всех строк из запроса применяется метод DB::getAll():

$rows = $dbh->getAll("SELECT planet,symbol FROM zodiac WHERE element LIKE'fire'");Для того чтобы получить только один столбец одной строки, применяется метод DB::getOne():

$col = $dbh->getOne("SELECT symbol FROM zodiac WHERE sign = 'Libra'");
Метод DB::getCol() позволяет получить один столбец из всех строк:
$cols = $dbh->getCol('SELECT symbol FROM zodiac');

Метод DB::getAssoc() предназначен для извлечения всех строк запроса и размещения их в ассоциативном массиве, индексированном по первому столбцу запроса:

$assoc = $dbh->getAssoc(
"SELECT sign,symbol,planet FROM zodiac WHERE element LIKE 'water'");

Обсуждение
Все эти функции возвращают объект DB_Error, если возникает ошибка во время выполнения запроса или извлечения данных.


Если запрос не возвращает результатов, то методы getRow() и getOne() возвращают NULL; методы getAll(), getCol() и getAssoc() возвращают пустой массив.

Во время получения результатов метод getRow() возвращает массив или объект в зависимости от текущего режима выборки. Метод getAll() – массив массивов или массив объектов, также в зависимости от режима выборки. Единственным результатом, который возвращает метод getOne(), обычно бывает строка, поскольку драйверы базы данных PHP, как правило, приводят извлеченные результаты к строковому типу. Аналогично метод getCol() возвращает массив результатов, при этом значения обычно представляют собой строки. Метод getAssoc() возвращает результаты в виде массива. Тип элементов этого массива определяется режимом выборки.

Как и в случае с методом DB::query(), можно передать в эти функции запрос, содержащий символы-заместители, и массив параметров, для заполнения этих символов. Эти параметры соответствующим образом заключаются в кавычки, когда они ставятся в запрос вместо символа-заместителя:

$row = $dbh->getRow('SELECT planet,symbol FROM zodiac WHERE sign LIKE ?',
array('Pisces'));

Параметр array является вторым аргументом каждой из этих функций, за исключением методов getCol() и getAssoc().


Для этих двух функций данный параметр является третьим аргументом. Второй аргумент метода getCol() содержит номер возвращаемого столбца, если
не требуется первый столбец (номер столбца 0). Например, следующее выражение возвращает значение столбца planet:

$cols = $dbh->getCol('SELECT symbol,planet FROM zodiac',1);Вторым аргументом функции getAssoc() является логическое значение, сообщающее функции, надо ли превращать значения возвращаемого ею ассоциативного массива в массивы, даже если это скалярные
величины. Рассмотрим в качестве примера следующий запрос:

$assoc = $dbh->getAssoc(
"SELECT sign,symbol FROM zodiac WHERE element LIKE 'water'");
print_r($assoc);
Array
(
[Cancer] => Crab
[Scorpio] => Scorpion
[Pisces] => Fishes
)

Запрос, переданный методу getAssoc(), извлекает лишь два столбца: первый – это ключ массива, а второй – скалярное значение массива. Ниже показано, как принудительно перевести значения массива в одноэлементные массивы:

$assoc = $dbh->getAssoc(
"SELECT sign,symbol FROM zodiac WHERE element LIKE 'water'",true);
print_r($assoc);
Array
(
[Cancer] => Array
(
[0] => Crab
)
[Scorpio] => Array
(
[0] => Scorpion
)
[Pisces] => Array
(
[0] => Fishes
)
)

Точно так же, как это делают методы fetchRow() и fetchInto(), методы getRow(), getAssoc() и getAll() по умолчанию размещают данные в числовых массивах.


Можно передать им режим выборки (третий аргумент функций getRow() или getAll(), четвертый аргумент функции get-
Assoc()). Они также соблюдают режим выборки, установленный методом DB::setFetchMode().

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Автоматическое присваивание уникальных значений идентификаторов
Выполнение запросов к базе данных SQL
Кэширование запросов и результатов
Модификация данных в базе данных SQL
Определение количества строк, возвращенных запросом

Вернуться в раздел: PHP / 10. Доступ к базам данных