Наборы результатов
Запрос 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);
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.