<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/pdo.constants.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'pdo.constants.fetch-modes.php',
    1 => 'Режимы выборки',
    2 => 'Режимы выборки',
  ),
  'up' => 
  array (
    0 => 'pdo.constants.php',
    1 => 'Предопределённые константы',
  ),
  'prev' => 
  array (
    0 => 'pdo.constants.php',
    1 => 'Предопределённые константы',
  ),
  'next' => 
  array (
    0 => 'pdo.connections.php',
    1 => 'Подключения и управление подключениями',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/pdo/constants.fetch-modes.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="pdo.constants.fetch-modes" class="section">
 <h2 class="title">Режимы выборки</h2>

 <p class="simpara">
  Информацию о семействе констант курсора — <code class="literal">PDO::FETCH_ORI_*</code> —
  содержит раздел «<a href="pdo.constants.php#pdo.constants.cursors" class="link">Константы курсора</a>».
 </p>

 <div class="section" id="pdo.fetch-modes.basic">
  <h2 class="title">Базовые режимы выборки</h2>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Режим выборки</th>
      <th>Краткое описание</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-default">PDO::FETCH_DEFAULT</a></code></strong>
      </td>
      <td>
       Служебный режим, в котором данные извлекаются в текущем режиме выборки по умолчанию.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-assoc">PDO::FETCH_ASSOC</a></code></strong>
      </td>
      <td>
       Ассоциативный массив с индексацией только по названию столбца.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-both">PDO::FETCH_BOTH</a></code></strong> (режим по умолчанию)
      </td>
      <td>
       Индексно-ассоциативный массив с индексацией как по номеру, так и по названию столбца.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-named">PDO::FETCH_NAMED</a></code></strong>
      </td>
      <td>
       Вариант режима <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-assoc">PDO::FETCH_ASSOC</a></code></strong>, в котором при дублировании названий столбцов значения не перезаписываются,
       а возвращаются в массиве.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-num">PDO::FETCH_NUM</a></code></strong>
      </td>
      <td>
       Индексный массив с индексацией только по номеру столбца.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-column">PDO::FETCH_COLUMN</a></code></strong>
      </td>
      <td>
       Значение или массив значений одного столбца.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-key-pair">PDO::FETCH_KEY_PAIR</a></code></strong>
      </td>
      <td>
       Массив пар «ключ — значение» с индексацией по первому столбцу.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-func">PDO::FETCH_FUNC</a></code></strong>
      </td>
      <td>
       Результат вызова callback-функции.
       Режим совместим только с методом <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span>.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-obj">PDO::FETCH_OBJ</a></code></strong>
      </td>
      <td>
       Объект стандартного класса — <span class="classname"><a href="class.stdclass.php" class="classname">stdClass</a></span>.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-class">PDO::FETCH_CLASS</a></code></strong>
      </td>
      <td>
       Объект конкретного класса.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="section" id="pdo.fetch-modes.class-flags">
  <h2 class="title">Опции режима PDO::FETCH_CLASS</h2>

  <p class="simpara">
   Опции изменяют поведение режима
   <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-class">PDO::FETCH_CLASS</a></code></strong>.
  </p>

  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Опция</th>
      <th>Краткое описание</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-classtype">PDO::FETCH_CLASSTYPE</a></code></strong>
      </td>
      <td>
       Опция указывает вернуть данные в объекте класса,
       название которого совпадает с названием первого столбца в запросе.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-props-late">PDO::FETCH_PROPS_LATE</a></code></strong>
      </td>
      <td>
       Опция указывает вызвать конструктор перед установкой свойств объекта.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-serialize">PDO::FETCH_SERIALIZE</a></code></strong>
      </td>
      <td>
       Опция указывает вернуть PHP-объект из сериализованных данных. Начиная с PHP 8.1.0 опция устарела.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="section" id="pdo.fetch-modes.single">
  <h2 class="title">Режимы с одним результатом</h2>

  <p class="simpara">
   Следующие режимы несовместимы
   с методом <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span>.
  </p>

  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Режим выборки</th>
      <th>Краткое описание</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-bound">PDO::FETCH_BOUND</a></code></strong>
      </td>
      <td>
       Привязывает значения к переменным.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-into">PDO::FETCH_INTO</a></code></strong>
      </td>
      <td>
       Обновляет свойства объекта.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-lazy">PDO::FETCH_LAZY</a></code></strong>
      </td>
      <td>
       Ленивая выборка через объект <span class="classname"><a href="class.pdorow.php" class="classname">PDORow</a></span>, который поддерживает доступ
       к свойствам как через синтаксис доступа к элементам массива, так и через стандартный синтаксис доступа к свойствам объекта.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="section" id="pdo.fetch-modes.grouped">
  <h2 class="title">
   Флаги специфичного поведения метода <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span>
  </h2>

  <p class="simpara">
   Следующие режимы работают только для многострочной выборки
   методом <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span> и несовместимы
   с режимами выборки по другой логике. Подробности даёт полная документация.
  </p>

  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Режим выборки</th>
      <th>Краткое описание</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-group">PDO::FETCH_GROUP</a></code></strong>
      </td>
      <td>
       Группирует результаты по первому столбцу.
      </td>
     </tr>

     <tr>
      <td>
       <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-unique">PDO::FETCH_UNIQUE</a></code></strong>
      </td>
      <td>
       Уникально индексирует результаты по первому столбцу.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="section" id="pdo.fetch-modes.duplicate-names">
  <h2 class="title">Обработка дублирующихся названий столбцов</h2>
  <p class="simpara">
   Результаты выборки иногда содержат столбцы с одинаковым названием,
   как при объединении двух таблиц с одноимёнными столбцами.
  </p>
  <p class="simpara">
    Массив или объект возвращается с единственным значением из одноимённых столбцов,
    поскольку PHP-структуры — массивы и объекты — не поддерживают одинаковых названий
    ключей или свойств.
  </p>
  <p class="simpara">
   Какое значение из дубликатов названий вернётся — не определено.
  </p>
  <p class="simpara">
   Столбцам указывают псевдонимы, чтобы проблема дублирования названий столбцов не возникала. Например:
  </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="sqlcode"><pre class="sqlcode">SELECT table1.created_at AS t1_created_at,
       table2.created_at AS t2_created_at
FROM table1
JOIN table2 ON table1.table2id = table2.id</pre>
</div>
   </div>

  </div>
  <p class="simpara">
   Дополнительную информацию даёт описание режимов <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-named">PDO::FETCH_NAMED</a></code></strong>,
   <strong><code><a href="pdo.constants.php#pdo.constants.attr-fetch-table-names">PDO::ATTR_FETCH_TABLE_NAMES</a></code></strong>
   и <strong><code><a href="pdo.constants.php#pdo.constants.attr-fetch-catalog-names">PDO::ATTR_FETCH_CATALOG_NAMES</a></code></strong>.
  </p>
 </div>

 <div class="section" id="pdo.fetch-modes.default">
  <h2 class="title">Установка режима выборки по умолчанию</h2>
  <p class="simpara">
   Передача константы <strong><code><a href="pdo.constants.php#pdo.constants.attr-default-fetch-mode">PDO::ATTR_DEFAULT_FETCH_MODE</a></code></strong>
   в параметрах метода <span class="methodname"><a href="pdo.construct.php" class="methodname">PDO::__construct()</a></span>
   или в аргументе атрибута метода <span class="methodname"><a href="pdo.setattribute.php" class="methodname">PDO::setAttribute()</a></span>
   устанавливает режим выборки по умолчанию для всех запросов.
  </p>
  <p class="simpara">
   Режим выборки по умолчанию для конкретной SQL-инструкции устанавливают
   методом <span class="methodname"><a href="pdostatement.setfetchmode.php" class="methodname">PDOStatement::setFetchMode()</a></span>.
   Индивидуальный режим влияет на повторное выполнение подготовленных SQL-инструкций
   и перебор результатов конструкцией <a href="control-structures.foreach.php" class="link"><code class="literal">foreach</code></a>.
  </p>
  <div class="caution"><strong class="caution">Предостережение</strong>
   <p class="simpara">
    Методом <span class="methodname"><a href="pdostatement.setattribute.php" class="methodname">PDOStatement::setAttribute()</a></span> нельзя установить
    режим выборки по умолчанию для конкретного запроса. Метод принимает только атрибуты, совместимые с текущим драйвером,
    и молча игнорирует атрибуты, которые не распознал.
   </p>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-default">
  <h2 class="title">PDO::FETCH_DEFAULT (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   Режим доступен с PHP 8.0.7.
  </p>
  <p class="simpara">
   Служебное значение, которое ссылается на текущий режим выборки по умолчанию
   для объекта <span class="classname"><a href="class.pdostatement.php" class="classname">PDOStatement</a></span>. Константу часто указывают как значение по умолчанию
   для параметров методов пользовательских классов, которые расширяют класс
   <span class="classname"><a href="class.pdostatement.php" class="classname">PDOStatement</a></span> и которые указывают
   через атрибут <strong><code><a href="pdo.constants.php#pdo.constants.attr-statement-class">PDO::ATTR_STATEMENT_CLASS</a></code></strong> как тип для возврата результатов запроса.
  </p>
  <p class="para">
   Значение нельзя указывать с атрибутом
   <strong><code><a href="pdo.constants.php#pdo.constants.attr-default-fetch-mode">PDO::ATTR_DEFAULT_FETCH_MODE</a></code></strong>.
  </p>
 </div>

 <div class="section" id="pdo.constants.fetch-assoc">
  <h2 class="title">PDO::FETCH_ASSOC (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   В режиме <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-assoc">PDO::FETCH_ASSOC</a></code></strong> возвращается ассоциативный массив,
   в котором ключи соответствуют названиям столбцов.
  </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT userid, name, country FROM users"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_ASSOC</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Array
(
    [userid] =&gt; 104
    [name] =&gt; Chris
    [country] =&gt; Ukraine
)
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-both">
  <h2 class="title">PDO::FETCH_BOTH (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   Режим выборки по умолчанию.
  </p>
  <p class="simpara">
   В режиме <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-both">PDO::FETCH_BOTH</a></code></strong> возвращается индексно-ассоциативный массив,
   в котором значение каждой строки дублируется: одно возвращается со строковым ключом по названию столбца,
   другое — с числовым ключом по номеру столбца.
  </p>
  <p class="simpara">
   Нумерация столбцов начинаются с 0 и определяется порядком столбцов в результатах
   запроса, а не, например, порядком определения столбцов в таблице.
  </p>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <p class="para">
    Лучше не опираться на числовой индекс столбца, поскольку нумерация изменится
    при изменении порядка столбцов в запросе или при изменении схемы таблицы
    и запросе наподобие <code class="literal">SELECT *</code>.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <span class="simpara">
    Количество записей с индексацией по названию столбца не совпадёт с количеством записей
    с индексацией по номеру столбца, если в результате возвращаются столбцы с одинаковым названием.
   </span>
  </p></blockquote>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT userid, name, country FROM users"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_BOTH</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Array
(
    [id] =&gt; 104,
    [0] =&gt; 104,
    [name] =&gt; Chris,
    [1] =&gt; Chris,
    [country] =&gt; Ukraine,
    [2] =&gt; Ukraine
)
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-named">
  <h2 class="title">PDO::FETCH_NAMED (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   В режиме <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-named">PDO::FETCH_NAMED</a></code></strong> результаты возвращаются в формате, аналогичном
   режиму <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-assoc">PDO::FETCH_ASSOC</a></code></strong>, за исключением возврата всех значений повторных
   столбцов в виде списка.
  </p>
  <p class="simpara">
   Подробнее об обработке повторных названий столбцов и альтернативах рассказывает раздел
   «<a href="pdo.constants.fetch-modes.php#pdo.fetch-modes.duplicate-names" class="link">Обработка дублирующихся названий столбцов</a>».
  </p>
  <p class="simpara">
   Порядок возврата значений повторных столбцов не определён.
   Невозможно определить конкретный источник каждого значения.
  </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(<br />    </span><span style="color: #DD0000">"SELECT users.*, referrer.name<br />     FROM users<br />     LEFT JOIN users AS referrer ON users.referred_by = referrer.userid<br />     WHERE userid = 109"<br /></span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_NUM</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Array
(
    [userid] =&gt; 109
    [name] =&gt; Array
        (
            [0] =&gt; Toni
            [1] =&gt; Chris
        )
    [country] =&gt; Germany
    [referred_by] = 104
)
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-num">
  <h2 class="title">PDO::FETCH_NUM (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   В режиме <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-num">PDO::FETCH_NUM</a></code></strong> возвращается индексный массив, в котором ключи
   соответствуют номеру столбца. Нумерация столбцов начинается с 0 и определяется порядком столбцов в результатах
   запроса, а не, например, порядком определения столбцов в таблице.
  </p>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <span class="simpara">
    Лучше не опираться на числовой индекс столбца, поскольку нумерация изменится
    при изменении порядка столбцов в запросе или при изменении схемы таблицы
    и запросе наподобие <code class="literal">SELECT *</code>.
   </span>
  </p></blockquote>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT userid, name, country FROM users"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_NUM</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Array
(
    [0] =&gt; 104
    [1] =&gt; Chris
    [2] =&gt; Ukraine
)
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-column">
  <h2 class="title">PDO::FETCH_COLUMN (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   В режиме <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-column">PDO::FETCH_COLUMN</a></code></strong> возвращаются значения из одного столбца.
   При вызове метода <span class="methodname"><a href="pdostatement.setfetchmode.php" class="methodname">PDOStatement::setFetchMode()</a></span>
   или <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span> конкретный столбец
   указывают во втором аргументе.
  </p>
  <p class="simpara">
   Метод выбросит ошибку <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span>,
   если таблица не содержит заданный столбец.
  </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT name, country FROM users LIMIT 3"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetchAll</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_COLUMN</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT name, country FROM users LIMIT 3"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetchAll</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_COLUMN</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Array
(
    [0] =&gt; Chris
    [1] =&gt; Jamie
    [2] =&gt; Robin
)

Array
(
    [0] =&gt; Ukraine
    [1] =&gt; England
    [2] =&gt; Germany
)
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-key-pair">
  <h2 class="title">PDO::FETCH_KEY_PAIR (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   В режиме <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-key-pair">PDO::FETCH_KEY_PAIR</a></code></strong> возвращается массив пар «ключ — значение»,
   в котором ключи соответствуют первому столбцу. В этом режиме в запросе указывают только 2 столбца.
   Режим выборки вернёт осмысленные результаты только при вызове метода <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span>.
  </p>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <span class="simpara">
    Значения потеряются, если первый столбец содержит неуникальные значения. Невозможно определить,
    какое значение или какие значения теряются.
   </span>
  </p></blockquote>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT name, country FROM users LIMIT 3"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetchAll</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_KEY_PAIR</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Array
(
    [Chris] =&gt; Ukraine
    [Jamie] =&gt; England
    [Robin] =&gt; Germany
)
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-func">
  <h2 class="title">PDO::FETCH_FUNC (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   В этом режиме возвращается значение, которое вернёт функция обратного вызова.
   Режим работает только с методом <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span>.
  </p>
  <p class="simpara">
   Значения столбцов становятся аргументами функции.
   По значениям аргументов невозможно получить названия столбцов.
   При определении пользовательской функции проверяют соответствие порядка столбцов в запросе
   порядку параметров функции.
  </p>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <span class="simpara">
    Режим <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-group">PDO::FETCH_GROUP</a></code></strong> группирует,
    а режим <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-unique">PDO::FETCH_UNIQUE</a></code></strong> уникализирует результаты выборки
    до вызова пользовательской функции обратного вызова.
   </span>
  </p></blockquote>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">valueCreator</span><span style="color: #007700">(</span><span style="color: #0000BB">$col1</span><span style="color: #007700">, </span><span style="color: #0000BB">$col2</span><span style="color: #007700">, </span><span style="color: #0000BB">$col3</span><span style="color: #007700">)<br />{<br />    return [<br />        </span><span style="color: #DD0000">'col1' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$col1</span><span style="color: #007700">,<br />        </span><span style="color: #DD0000">'col2' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">strtoupper</span><span style="color: #007700">(</span><span style="color: #0000BB">$col2</span><span style="color: #007700">),<br />        </span><span style="color: #DD0000">'col3' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$col3</span><span style="color: #007700">,<br />        </span><span style="color: #DD0000">'customKey' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'customValue'</span><span style="color: #007700">,<br />    ];<br />}<br /><br /></span><span style="color: #0000BB">$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT userid, name, country FROM users LIMIT 3"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetchAll</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_FUNC</span><span style="color: #007700">, </span><span style="color: #0000BB">valueCreator</span><span style="color: #007700">(...));<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Array
(
    [0] =&gt; Array
        (
            [col1] =&gt; 104
            [col2] =&gt; SAM
            [col3] =&gt; Ukraine
            [customKey] =&gt; customValue
        )

    [1] =&gt; Array
        (
            [col1] =&gt; 105
            [col2] =&gt; JAMIE
            [col3] =&gt; England
            [customKey] =&gt; customValue
        )

    [2] =&gt; Array
        (
            [col1] =&gt; 107
            [col2] =&gt; ROBIN
            [col3] =&gt; Germany
            [customKey] =&gt; customValue
        )

)
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-obj">
  <h2 class="title">PDO::FETCH_OBJ (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   В режиме <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-obj">PDO::FETCH_OBJ</a></code></strong> возвращается объект <span class="classname"><a href="class.stdclass.php" class="classname">stdClass</a></span>.
  </p>
  <p class="simpara">
   См. также описания метода <span class="methodname"><a href="pdostatement.fetchobject.php" class="methodname">PDOStatement::fetchObject()</a></span>
   и режима <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-class">PDO::FETCH_CLASS</a></code></strong>.
  </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT userid, name, country FROM users"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_OBJ</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
stdClass Object
(
    [userid] =&gt; 104
    [name] =&gt; Chris
    [country] =&gt; Ukraine
)
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-class">
  <h2 class="title">PDO::FETCH_CLASS (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   В этом режиме возвращается объект заданного класса. Дополнительную информацию о поведении
   даёт описание <a href="pdo.constants.fetch-modes.php#pdo.fetch-modes.class-flags" class="link">флагов опций</a>.
  </p>
  <p class="simpara">
   Свойство объявится динамически, если класс не содержит свойства с названием возвращаемого столбца.
   Объявление динамических свойств устарело и начиная с PHP 9.0 вызовет ошибку.
  </p>
  <p class="simpara">
   См. также описание метода <span class="methodname"><a href="pdostatement.fetchobject.php" class="methodname">PDOStatement::fetchObject()</a></span>.
  </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">TestEntity<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$userid</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$name</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$country</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$referred_by_userid</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        print </span><span style="color: #DD0000">"Конструктор вызвали со следующим количеством аргументов: " </span><span style="color: #007700">. </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">func_get_args</span><span style="color: #007700">()) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />        print </span><span style="color: #DD0000">"Свойства устанавливаются до вызова конструктора? "<br />            </span><span style="color: #007700">. (isset(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">) ? </span><span style="color: #DD0000">'Да' </span><span style="color: #007700">: </span><span style="color: #DD0000">'Нет'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(<br />    </span><span style="color: #DD0000">"SELECT userid, name, country, referred_by_userid FROM users"<br /></span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setFetchMode</span><span style="color: #007700">(</span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_CLASS</span><span style="color: #007700">, </span><span style="color: #0000BB">TestEntity</span><span style="color: #007700">::class);<br /><br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Вывод приведённого примера будет похож на:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Конструктор вызвали со следующим количеством аргументов: 0
Свойства устанавливаются до вызова конструктора? Да
object(TestEntity)#3 (4) {
  [&quot;userid&quot;]=&gt;
  int(104)
  [&quot;name&quot;]=&gt;
  string(5) &quot;Chris&quot;
  [&quot;country&quot;]=&gt;
  string(7) &quot;Ukraine&quot;
  [&quot;referred_by_userid&quot;]=&gt;
  NULL
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-classtype">
  <h2 class="title">PDO::FETCH_CLASSTYPE (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   Опция работает только в сочетании с режимом
   <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-class">PDO::FETCH_CLASS</a></code></strong>
   <a href="pdo.constants.fetch-modes.php#pdo.fetch-modes.class-flags" class="link">и другими опциями режима</a>.
  </p>
  <p class="simpara">
   С этой опцией модуль PDO возвращает данные в объекте класса, название которого
   совпадает с названием первого столбца в запросе.
  </p>
  <p class="simpara">
   Модуль вернет объект <span class="classname"><a href="class.stdclass.php" class="classname">stdClass</a></span>, без выдачи предупреждения или ошибки,
   если заданный класс недоступен.
  </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">TestEntity<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$userid</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$name</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$country</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$referred_by_userid</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        print </span><span style="color: #DD0000">"Конструктор вызвали со следующим количеством аргументов: " </span><span style="color: #007700">. </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">func_get_args</span><span style="color: #007700">()) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />        print </span><span style="color: #DD0000">"Свойства устанавливаются до вызова конструктора? "<br />            </span><span style="color: #007700">. (isset(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">) ? </span><span style="color: #DD0000">'Да' </span><span style="color: #007700">: </span><span style="color: #DD0000">'Нет'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(<br />    </span><span style="color: #DD0000">"SELECT 'TestEntity', userid, name, country, referred_by_userid FROM users"<br /></span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setFetchMode</span><span style="color: #007700">(</span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_CLASS </span><span style="color: #007700">| </span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_CLASSTYPE</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Вывод приведённого примера будет похож на:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Конструктор вызвали со следующим количеством аргументов: 0
Свойства устанавливаются до вызова конструктора? Да
object(TestEntity)#3 (4) {
  [&quot;userid&quot;]=&gt;
  int(104)
  [&quot;name&quot;]=&gt;
  string(5) &quot;Chris&quot;
  [&quot;country&quot;]=&gt;
  string(7) &quot;Ukraine&quot;
  [&quot;referred_by_userid&quot;]=&gt;
  NULL
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-props-late">
  <h2 class="title">PDO::FETCH_PROPS_LATE (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   Опция работает только в сочетании с режимом
   <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-class">PDO::FETCH_CLASS</a></code></strong>
   <a href="pdo.constants.fetch-modes.php#pdo.fetch-modes.class-flags" class="link">и другими опциями режима</a>.
  </p>
  <p class="simpara">
   С этой опцией конструктор вызывается до установки свойств.
  </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">TestEntity<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$userid</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$name</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$country</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$referred_by_userid</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        print </span><span style="color: #DD0000">"Конструктор вызвали со следующим количеством аргументов: " </span><span style="color: #007700">. </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">func_get_args</span><span style="color: #007700">()) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />        print </span><span style="color: #DD0000">"Свойства устанавливаются до вызова конструктора? "<br />            </span><span style="color: #007700">. (isset(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">) ? </span><span style="color: #DD0000">'Да' </span><span style="color: #007700">: </span><span style="color: #DD0000">'Нет'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(<br />    </span><span style="color: #DD0000">"SELECT userid, name, country, referred_by_userid FROM users"<br /></span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setFetchMode</span><span style="color: #007700">(</span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_CLASS </span><span style="color: #007700">| </span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_PROPS_LATE</span><span style="color: #007700">, </span><span style="color: #0000BB">TestEntity</span><span style="color: #007700">::class);<br /><br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Вывод приведённого примера будет похож на:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Конструктор вызвали со следующим количеством аргументов: 0
Свойства устанавливаются до вызова конструктора? Нет
object(TestEntity)#3 (4) {
  [&quot;userid&quot;]=&gt;
  int(104)
  [&quot;name&quot;]=&gt;
  string(5) &quot;Chris&quot;
  [&quot;country&quot;]=&gt;
  string(7) &quot;Ukraine&quot;
  [&quot;referred_by_userid&quot;]=&gt;
  NULL
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-serialize">
  <h2 class="title">PDO::FETCH_SERIALIZE (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  
<div class="warning"><strong class="warning">Внимание</strong>
 <p class="simpara">
  Начиная с PHP 8.1.0 функциональность <em>УСТАРЕЛА</em>.
  Полагаться на функциональность настоятельно не рекомендуют.
 </p>
</div>
  <p class="simpara">
   Режим выборки работает только в сочетании
   с режимом <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-class">PDO::FETCH_CLASS</a></code></strong>
   <a href="pdo.constants.fetch-modes.php#pdo.fetch-modes.class-flags" class="link">и опциями режима</a>.
  </p>
  <p class="simpara">
   Режим устанавливают только с классами, которые реализуют
   интерфейс <span class="interfacename"><a href="class.serializable.php" class="interfacename">Serializable</a></span>.
  </p>
  <div class="caution"><strong class="caution">Предостережение</strong>
   <p class="simpara">
    Режим не поддерживает сами строки с результатом сериализации объекта,
    как это делает функция <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span>.
   </p>
  </div>
  <div class="caution"><strong class="caution">Предостережение</strong>
   <p class="para">
    Режим выборки не вызывает конструктор.
   </p>
  </div>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">TestEntity </span><span style="color: #007700">implements </span><span style="color: #0000BB">Serializable<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$userid</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$name</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$country</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$referred_by_userid</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        print </span><span style="color: #DD0000">"Конструктор вызвали со следующим количеством аргументов: " </span><span style="color: #007700">. </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">func_get_args</span><span style="color: #007700">()) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />        print </span><span style="color: #DD0000">"Свойства устанавливаются до вызова конструктора? "<br />            </span><span style="color: #007700">. (isset(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">) ? </span><span style="color: #DD0000">'Да' </span><span style="color: #007700">: </span><span style="color: #DD0000">'Нет'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    }<br /><br />    public function </span><span style="color: #0000BB">serialize</span><span style="color: #007700">()<br />    {<br />        return </span><span style="color: #0000BB">join</span><span style="color: #007700">(<br />            </span><span style="color: #DD0000">"|"</span><span style="color: #007700">,<br />            [</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userid</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">country</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">referred_by_userid</span><span style="color: #007700">]<br />        );<br />    }<br /><br />    public function </span><span style="color: #0000BB">unserialize</span><span style="color: #007700">(</span><span style="color: #0000BB">string $data</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">$parts </span><span style="color: #007700">= </span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">"|"</span><span style="color: #007700">, </span><span style="color: #0000BB">$data</span><span style="color: #007700">);<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userid </span><span style="color: #007700">= (int) </span><span style="color: #0000BB">$parts</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name </span><span style="color: #007700">= </span><span style="color: #0000BB">$parts</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">country </span><span style="color: #007700">= </span><span style="color: #0000BB">$parts</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">];<br /><br />        </span><span style="color: #0000BB">$refId </span><span style="color: #007700">= </span><span style="color: #0000BB">$parts</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">];<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">referred_by_userid </span><span style="color: #007700">= (</span><span style="color: #0000BB">$refId </span><span style="color: #007700">=== </span><span style="color: #DD0000">"" </span><span style="color: #007700">? </span><span style="color: #0000BB">null </span><span style="color: #007700">: (int) </span><span style="color: #0000BB">$refId</span><span style="color: #007700">);<br />    }<br />}<br /><br />print </span><span style="color: #DD0000">"Настройка записи (конструктор вызывается вручную):\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">exec</span><span style="color: #007700">(<br />    </span><span style="color: #DD0000">"CREATE TABLE serialize (<br />        sdata TEXT<br />    )"<br /></span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$origObj </span><span style="color: #007700">= new </span><span style="color: #0000BB">TestEntity</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$origObj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userid </span><span style="color: #007700">= </span><span style="color: #0000BB">200</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$origObj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name </span><span style="color: #007700">= </span><span style="color: #DD0000">'Seri'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$origObj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">country </span><span style="color: #007700">= </span><span style="color: #DD0000">'Syria'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$origObj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">referred_by_userid </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$insert </span><span style="color: #007700">= </span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prepare</span><span style="color: #007700">(</span><span style="color: #DD0000">"INSERT INTO serialize (sdata) VALUES (:sdata)"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$insert</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">execute</span><span style="color: #007700">([</span><span style="color: #DD0000">'sdata' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$origObj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">serialize</span><span style="color: #007700">()]);<br /><br />print </span><span style="color: #DD0000">"\nПолучаем результат:\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$query </span><span style="color: #007700">= </span><span style="color: #DD0000">"SELECT sdata FROM serialize"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #0000BB">$query</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// ПРИМЕЧАНИЕ: Конструктор не вызывается!<br /></span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setFetchMode</span><span style="color: #007700">(</span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_CLASS </span><span style="color: #007700">| </span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_SERIALIZE</span><span style="color: #007700">, </span><span style="color: #0000BB">TestEntity</span><span style="color: #007700">::class);<br /><br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Вывод приведённого примера будет похож на:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Deprecated: TestEntity implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in Standard input code on line 2
Настройка записи (конструктор вызывается вручную):
Конструктор вызвали со следующим количеством аргументов: 0
Свойства устанавливаются до вызова конструктора? Нет

Получаем результат:
Deprecated: PDOStatement::setFetchMode(): The PDO::FETCH_SERIALIZE mode is deprecated in Standard input code on line 58

Deprecated: PDOStatement::fetch(): The PDO::FETCH_SERIALIZE mode is deprecated in Standard input code on line 59
object(TestEntity)#5 (4) {
  [&quot;userid&quot;]=&gt;
  int(200)
  [&quot;name&quot;]=&gt;
  string(4) &quot;Seri&quot;
  [&quot;country&quot;]=&gt;
  string(5) &quot;Syria&quot;
  [&quot;referred_by_userid&quot;]=&gt;
  NULL
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-bound">
  <h2 class="title">PDO::FETCH_BOUND (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   Опция несовместима с методом
   <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span>.
  </p>
  <p class="simpara">
   С этой опцией модуль не возвращает результат напрямую, а привязывает значения к переменным,
   которые указали методом <span class="methodname"><a href="pdostatement.bindcolumn.php" class="methodname">PDOStatement::bindColumn()</a></span>.
   Вызов метода выборки возвращает значение <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>.
  </p>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <p class="para">
    Для корректной работы подготовленных SQL-инструкций переменные привязывают
    после выполнения запроса.
   </p>
  </p></blockquote>
  <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$query </span><span style="color: #007700">= </span><span style="color: #DD0000">"SELECT users.userid, users.name, users.country, referrer.name<br />    FROM users<br />    LEFT JOIN users AS referrer ON users.referred_by_userid = referrer.userid"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prepare</span><span style="color: #007700">(</span><span style="color: #0000BB">$query</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">execute</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindColumn</span><span style="color: #007700">(</span><span style="color: #DD0000">'userid'</span><span style="color: #007700">, </span><span style="color: #0000BB">$userId</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindColumn</span><span style="color: #007700">(</span><span style="color: #DD0000">'name'</span><span style="color: #007700">, </span><span style="color: #0000BB">$name</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindColumn</span><span style="color: #007700">(</span><span style="color: #DD0000">'country'</span><span style="color: #007700">, </span><span style="color: #0000BB">$country</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Связываем переменную по позиции столбца, чтобы разрешить дублирование названия столбца.<br />// А лучше вместо названия столбца указать в SQL-запросе псевдоним,<br />// чтобы не сломать привязку при изменении запроса,<br />// например: referrer.name AS referrer_name<br /></span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindColumn</span><span style="color: #007700">(</span><span style="color: #0000BB">4</span><span style="color: #007700">, </span><span style="color: #0000BB">$referrerName</span><span style="color: #007700">);<br /><br />while (</span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_BOUND</span><span style="color: #007700">)) {<br />    print </span><span style="color: #0000BB">join</span><span style="color: #007700">(</span><span style="color: #DD0000">"\t"</span><span style="color: #007700">, [</span><span style="color: #0000BB">$userId</span><span style="color: #007700">, </span><span style="color: #0000BB">$name</span><span style="color: #007700">, </span><span style="color: #0000BB">$country</span><span style="color: #007700">, (</span><span style="color: #0000BB">$referrerName </span><span style="color: #007700">?? </span><span style="color: #DD0000">'NULL'</span><span style="color: #007700">)]) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}</span></span></code></div>
  </div>

  
<p class="para">
 Результат выполнения приведённого примера:
</p>

  <div class="example-contents screen">
<div class="cdata"><pre>
104	Chris	Ukraine	NULL
105	Jamie	England	NULL
107	Robin	Germany	Chris
108	Sean	Ukraine	NULL
109	Toni	Germany	NULL
110	Toni	Germany	NULL
</pre></div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-into">
  <h2 class="title">PDO::FETCH_INTO (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   Режим выборки несовместим с методом
   <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span>.
  </p>
  <p class="simpara">
   Режим выборки обновляет свойства заданного объекта. Метод выборки возвращает объект,
   если выполнился успешно.
  </p>
  <p class="simpara">
   Свойство объявится динамически, если класс не содержит свойства с названием возвращаемого столбца.
   Объявление динамических свойств устарело и начиная с PHP 9.0 вызовет ошибку.
  </p>
  <p class="simpara">
   В этом режиме обновляются только свойства с модификатором <code class="literal">public</code>, а защищённые и закрытые свойства
   игнорируются, попытка обновить свойство с модификатором <code class="literal">readonly</code> вызовет фатальную ошибку.
  </p>
  <div class="caution"><strong class="caution">Предостережение</strong>
   <p class="simpara">
    Невозможно изменить обновляемый объект без вызова метода
    <span class="methodname"><a href="pdostatement.setfetchmode.php" class="methodname">PDOStatement::setFetchMode()</a></span> между извлечением каждой записи.
   </p>
  </div>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">TestEntity<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$userid</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$name</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$country</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">$referred_by_userid</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">TestEntity</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setFetchMode</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_INTO</span><span style="color: #007700">, </span><span style="color: #0000BB">$obj</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT userid, name, country, referred_by_userid FROM users"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Вывод приведённого примера будет похож на:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
object(TestEntity)#3 (4) {
  [&quot;userid&quot;]=&gt;
  int(104)
  [&quot;name&quot;]=&gt;
  string(5) &quot;Chris&quot;
  [&quot;country&quot;]=&gt;
  string(7) &quot;Ukraine&quot;
  [&quot;referred_by_userid&quot;]=&gt;
  NULL
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-lazy">
  <h2 class="title">PDO::FETCH_LAZY (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   Режим выборки несовместим с методом
   <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span>.
  </p>
  <p class="simpara">
   Режим возвращает объект <span class="classname"><a href="class.pdorow.php" class="classname">PDORow</a></span>, который поддерживает доступ к свойствам
   как через синтаксис доступа к элементам массива, так и через синтаксис доступа к свойствам объекта, сочетая поведение
   режимов <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-both">PDO::FETCH_BOTH</a></code></strong> и <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-obj">PDO::FETCH_OBJ</a></code></strong>.
   В этом режиме при извлечении очередной строки метод подготавливает объект с результатами
   «ленивым» способом — не создаёт новый экземпляр, а обновляет значения свойств в том же объекте.
  </p>
  <p class="simpara">
   Ленивое извлечение повышает эффективность доступа к небуферизованным результатам на сервере
   баз данных, с точки зрения работы с памятью на стороне PHP. Буферизует ли модуль PDO результаты на клиентской
   стороне, зависит от специфичного для базы данных драйвера и его конфигурации.
  </p>
  <div class="caution"><strong class="caution">Предостережение</strong>
   <p class="simpara">
    При доступе к неопределённым свойствам или ключам объект <span class="classname"><a href="class.pdorow.php" class="classname">PDORow</a></span>
    вернет значение <code class="literal">NULL</code>, без ошибки или предупреждения.
    Это затруднит обнаружение и отладку ошибок, которые возникают из-за опечаток, или запросов, которые не возвращают ожидаемые данные.
   </p>
  </div>
  <div class="caution"><strong class="caution">Предостережение</strong>
   <p class="simpara">
    Возвращаемый объект <span class="classname"><a href="class.pdorow.php" class="classname">PDORow</a></span> обновляется каждый раз
    при извлечении результата.
   </p>
  </div>
  <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT userid, name, country, referred_by_userid FROM users"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_LAZY</span><span style="color: #007700">);<br /><br />print </span><span style="color: #DD0000">"ID: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$result</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />print </span><span style="color: #DD0000">"Name: </span><span style="color: #007700">{</span><span style="color: #0000BB">$result</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">}</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />print </span><span style="color: #DD0000">"Country: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$result</span><span style="color: #007700">[</span><span style="color: #DD0000">'country'</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// Возвращается NULL. Без выдачи предупреждения или ошибки.<br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"Неопределённое свойство: " </span><span style="color: #007700">. </span><span style="color: #0000BB">var_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">does_not_exist</span><span style="color: #007700">, </span><span style="color: #0000BB">true</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$differentResult </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_LAZY</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Предыдущий объект PDORow теперь указывает на вновь извлечённый результат<br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"ID: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$result</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;</span></span></code></div>
  </div>

  
<p class="para">
 Результат выполнения приведённого примера:
</p>

  <div class="example-contents screen">
<div class="cdata"><pre>
ID: 104
Name: Chris
Country: Ukraine
Неопределённое свойство: NULL
ID: 105
</pre></div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-group">
  <h2 class="title">PDO::FETCH_GROUP (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   В режиме <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-group">PDO::FETCH_GROUP</a></code></strong> возвращаются списки ассоциативных массивов,
   ключами которых становятся значения первого столбца. Для уникальных столбцов возвращаются списки из одной записи,
   поэтому установка режима становится оправданной только при группировке результатов по неуникальному столбцу.
   Режим выборки работает только с методом <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span>.
  </p>
  <p class="simpara">
   При объединении с режимом <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-unique">PDO::FETCH_UNIQUE</a></code></strong>
   оба проиндексируют результаты выборки по одному и тому же столбцу, поэтому сочетание режимов бесполезно.
  </p>
  <p class="simpara">
   Режим выборки с группировкой по первому столбцу комбинируют со следующими режимами:
   <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-assoc">PDO::FETCH_ASSOC</a></code></strong>, <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-both">PDO::FETCH_BOTH</a></code></strong>,
   <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-named">PDO::FETCH_NAMED</a></code></strong>, <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-num">PDO::FETCH_NUM</a></code></strong>,
   <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-column">PDO::FETCH_COLUMN</a></code></strong>
   или <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-func">PDO::FETCH_FUNC</a></code></strong>.
  </p>
  <p class="simpara">
   Объект <span class="classname"><a href="class.pdostatement.php" class="classname">PDOStatement</a></span> обработает результаты в режиме выборки по умолчанию,
   если для режима группировки не задали режим из приведённого списка.
  </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT country, userid, name FROM users"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetchAll</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_GROUP </span><span style="color: #007700">| </span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_ASSOC</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Array
(
    [Ukraine] =&gt; Array
        (
            [0] =&gt; Array
                (
                    [userid] =&gt; 104
                    [name] =&gt; Chris
                )

            [1] =&gt; Array
                (
                    [userid] =&gt; 108
                    [name] =&gt; Sean
                )

        )
    [England] =&gt; Array
        (
            [0] =&gt; Array
                (
                    [userid] =&gt; 105
                    [name] =&gt; Jamie
                )

        )

    [Germany] =&gt; Array
        (
            [0] =&gt; Array
                (
                    [userid] =&gt; 107
                    [name] =&gt; Robin
                )

            [1] =&gt; Array
                (
                    [userid] =&gt; 109
                    [name] =&gt; Toni
                )
        )
)
</pre></div>
   </div>
  </div>
  <p class="simpara">
   В приведённом примере массивы со значениями построчных результатов не включают первый столбец,
   который доступен только как ключ. Для включения в состав массива
   название столбца повторяют в запросе, как в следующем примере:
  </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT country, userid, name, country FROM users"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetchAll</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_GROUP </span><span style="color: #007700">| </span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_ASSOC</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Array
(
    [Ukraine] =&gt; Array
        (
            [0] =&gt; Array
                (
                    [userid] =&gt; 104
                    [name] =&gt; Chris
                    [country] =&gt; Ukraine
                )

            [1] =&gt; Array
                (
                    [userid] =&gt; 108
                    [name] =&gt; Sean
                    [country] =&gt; Ukraine
                )

        )
    [England] =&gt; Array
        (
            [0] =&gt; Array
                (
                    [userid] =&gt; 105
                    [name] =&gt; Jamie
                    [country] =&gt; England
                )

        )

    [Germany] =&gt; Array
        (
            [0] =&gt; Array
                (
                    [userid] =&gt; 107
                    [name] =&gt; Robin
                    [country] =&gt; Germany
                )

            [1] =&gt; Array
                (
                    [userid] =&gt; 109
                    [name] =&gt; Toni
                    [country] =&gt; Germany
                )
        )
)
</pre></div>
   </div>
  </div>
 </div>

 <div class="section" id="pdo.constants.fetch-unique">
  <h2 class="title">PDO::FETCH_UNIQUE (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>)</h2>
  <p class="simpara">
   В режиме <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-unique">PDO::FETCH_UNIQUE</a></code></strong> возвращается массив, в котором записи индексируются по первому столбцу,
   и возвращается только одна запись для значения индекса. Режим выборки работает только
   с методом <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span>.
  </p>
  <p class="simpara">
   При объединении с режимом <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-group">PDO::FETCH_GROUP</a></code></strong>
   оба проиндексируют результаты выборки по одному и тому же столбцу, поэтому сочетание режимов бесполезно.
  </p>
  <p class="simpara">
   Режим выборки с уникализацией по первому столбцу комбинируют со следующими режимами:
   <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-assoc">PDO::FETCH_ASSOC</a></code></strong>, <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-both">PDO::FETCH_BOTH</a></code></strong>,
   <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-named">PDO::FETCH_NAMED</a></code></strong>, <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-num">PDO::FETCH_NUM</a></code></strong>,
   <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-column">PDO::FETCH_COLUMN</a></code></strong>
   или <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-func">PDO::FETCH_FUNC</a></code></strong>.
  </p>
  <p class="simpara">
   Объект <span class="classname"><a href="class.pdostatement.php" class="classname">PDOStatement</a></span> обработает результаты в режиме выборки по умолчанию,
   если для режима уникализации не задали режим из приведённого списка.
  </p>
  <p class="simpara">
   При работе с уникальным столбцом наподобие ID
   режим быстро возвращает результаты, поскольку БД содержит индекс для такого значения.
  </p>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <span class="simpara">
    При выборке из неуникальных столбцов значения потеряются. Невозможно определить,
    какое значение или какие значения теряются.
   </span>
  </p></blockquote>
  <div class="caution"><strong class="caution">Предостережение</strong>
   <p class="simpara">
    Фильтрацию записей лучше выполнять в SQL-запросе, когда возможно. База данных
    построит план запроса с учётом индексов, чтобы оптимизировать фильтрацию и вернуть только искомые записи.
    Выборка из базы данных избыточного количества записей значительно
    увеличивает потребление памяти и время выполнения запроса для более крупных наборов данных с результатами запроса.
   </p>
  </div>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT userid, name, country FROM users LIMIT 3"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetchAll</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_UNIQUE </span><span style="color: #007700">| </span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_ASSOC</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Array
(
    [104] =&gt; Array
        (
            [name] =&gt; Chris
            [country] =&gt; Ukraine
        )

    [105] =&gt; Array
        (
            [name] =&gt; Jamie
            [country] =&gt; England
        )

    [107] =&gt; Array
        (
            [name] =&gt; Robin
            [country] =&gt; Germany
        )

)
</pre></div>
   </div>
  </div>
  <p class="simpara">
   В приведённом примере массивы со значениями построчных результатов не включают первый столбец,
   который доступен только как ключ. Для включения в состав массива
   название столбца повторяют в запросе, как в следующем примере:
  </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">$pdo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT userid, userid, name, country FROM users LIMIT 3"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$stmt</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetchAll</span><span style="color: #007700">(</span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_UNIQUE </span><span style="color: #007700">| </span><span style="color: #0000BB">\PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">FETCH_ASSOC</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Array
(
    [104] =&gt; Array
        (
            [userid] =&gt; 104
            [name] =&gt; Chris
            [country] =&gt; Ukraine
        )

    [105] =&gt; Array
        (
            [userid] =&gt; 105
            [name] =&gt; Jamie
            [country] =&gt; England
        )

    [107] =&gt; Array
        (
            [userid] =&gt; 107
            [name] =&gt; Robin
            [country] =&gt; Germany
        )

)
</pre></div>
   </div>
  </div>
 </div>

</div><?php manual_footer($setup); ?>