PHP Tricks
February 6, 2023

PHP 8.1: MySQLi: fetch_column function

Еще одно предложение внесенное Kamil Tekiela было включено в релиз РНР 8.1
Начиная с этого релиза еще один метод стал доступен в классе mysqli - метод fetch_column ранее имплементированный в библиотеке PDO

Создадим маленькую тестовую таблицу

create table persons (
    id int primary key, 
    name varchar(64),
    age tinyint
);

insert into persons values (10, 'Alice', 18), (20, 'Bob', 22);

+====+=======+=====+
| id | name  | age |
+====+=======+=====+
| 10 | Alice | 18  |
| 20 | Bob   | 22  |
+----+-------+-----+
$result = $mysqli->query("SELECT name FROM persons WHERE id = 10");

echo $result->fetch_column();
//Alice

В случае если запрос возвращает несколько колонок функция fetch_column может вернуть значение из столбца номер которого передан в качестве параметра функции (нумерация колонок начинается с 0).

$result = $mysqli->query("SELECT name, age FROM persons WHERE id = 10");

echo $result->fetch_column(1);
//18

Здесь можно выполнить код PHP онлайн

Как и в случае с другими методами fetch_*, этот также перемещает внутренний указатель результата на следующую строку при вызове. Таким образом, вы не можете использовать fetch_column(i) для цикла с одним столбцом записи. Следующий пример демонстрирует эту ошибку:

<?php
$result = $mysqli->query("SELECT name, age FROM persons");

$name = $result->fetch_column(0);
$age  = $result->fetch_column(1);

// Returns Alice  name with Bob's age
printf("Name: %s, age: %d", $name, $age);

https://phpize.online/sql/mysql57/b77bf62cd00f67bb433719a530ce2c8c/php/php81/d39ac72d052aa9f0009754256c9eec4a/