Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Наборы результатов

08/05/2020, by maria

Запрос Select всегда будет возвращать объект набора результатов, содержащий ноль или более записей. Существует несколько способов получения данных из этого набора результатов в зависимости от варианта использования. Записи извлекаются как объекты по умолчанию, если вы не измените режим извлечения (см .: setFetchMode)

Наиболее распространенным случаем является перебор набора результатов с помощью цикла foreach().

// Static query:
$result = $connection->query("SELECT field1, field2 FROM {mytable}");
foreach ($result as $record) {
  // Do something with each $record
}

// Dynamic query
$result = $query->execute();
foreach ($result as $record) {
  // Do something with each $record.
}

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

Чтобы явно получить следующую запись, используйте:

$record = $result->fetch();            // Use the default fetch mode.
$record = $result->fetchObject();  // Fetch as a stdClass object.
$record = $result->fetchAssoc();   // Fetch as an associative array.

Если следующей записи нет, возвращается FALSE. Обычно следует избегать fetch() в пользу fetchObject() и fetchAssoc(), так как последние более самодокументированы. Если вам нужно использовать какой-либо другой режим извлечения, поддерживаемый PDO, используйте fetch().

Чтобы получить только одно поле из набора результатов, используйте:

$record = $result->fetchField($column_index);

Значение по умолчанию $column_index равно 0 для первого поля.

Для подсчета количества строк, возвращаемых оператором DELETE, INSERT или UPDATE, используйте:

$number_of_rows = $result->rowCount();

Для подсчета количества строк, возвращаемых оператором SELECT, используйте:

$number_of_rows = $connection->select('mytable')->countQuery()->execute()->fetchField();

Чтобы извлечь все записи сразу в один массив, используйте одно из следующего:

// Retrieve all records into an indexed array of stdClass objects.
$result->fetchAll();

// Retrieve all records into an associative array keyed by the field in the result specified.
$result->fetchAllAssoc($field);

// Retrieve a 2-column result set as an associative array of field 0 => field 1.
$result->fetchAllKeyed();
// You can also specify which two fields to use by specifying the column numbers for each field
$result->fetchAllKeyed(0,2); // would be field 0 => field 2
$result->fetchAllKeyed(1,0); // would be field 1 => field 0
// If you need an array where keys and values contain the same field (e.g. for creating a 'checkboxes' form element), the following is a perfectly valid method:
$result->fetchAllKeyed(0,0); // would be field 0 => field 0, e.g. [article] => [article]

// Retrieve a 1-column result set as one single array.
$result->fetchCol();
// Column number can be specified otherwise defaults to first column
$result->fetchCol($column_index);

Обратите внимание, что fetchAll() и fetchAllAssoc() будут по умолчанию извлекать, используя любой режим извлечения, установленный в запросе (числовой массив, ассоциативный массив или объект). Это можно изменить, передав новую константу режима выборки. Для fetchAll() это первый параметр. Для fetchAllAssoc() это второй параметр. Примеры:

// Get an array of arrays keyed on the field 'id'.
$result->fetchAllAssoc('id', PDO::FETCH_ASSOC);
// Get an array of arrays with both numeric and associative keys.
$result->fetchAll(PDO::FETCH_BOTH);

Поскольку PHP поддерживает вызовы методов цепочки возвращаемых объектов, очень часто пропускается переменная $result полностью, например:

// Get an associative array of ids to titles.
$examples = $connection->query("SELECT id, title FROM {mytable}")->fetchAllKeyed();

// Get a single record out of the database.
$myobj = $connection->query("SELECT * FROM {mytable} WHERE example = :example", [':example' => $example])->fetchObject();

// Get a single value out of the database.
$myval = $connection->query("SELECT example FROM {mytable} WHERE id = :id", [':id' => $id])->fetchField();

Если вам нужен простой массив типа [1, 2, 3, 4, 5], вам придется согласиться на что-то более похожее на [1=>1, 2=>2, 3=>3, 4=>4, 5=>5]. Вы можете получить это с помощью

$ids = $connection->query("SELECT id FROM {example}")->fetchAllKeyed(0,0);

 

Source URL:

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.