Используйте переменную вместо термина MYSQLI_ASSOC

Чтобы сохранить динамический тип массива в запросе mysqli_fetch_array, я хотел бы использовать переменную вместо термина MYSQLI_ASSOC. Когда я пробую приведенный ниже код:

$array_type = "MYSQLI_ASSOC";
while($row = mysqli_fetch_array($query,$array_type)){
echo $row["name"];
}

Я получаю следующую ошибку:

Warning: mysqli_fetch_array() expects parameter 2 to be integer, string given in /var/www/dca/query_results.php on line 28

Я бы хотел избежать использования операторов if и else, если это возможно.

MYSQLI_ASSOC - это постоянная величина.
user3783243 17.09.2018 23:51

Проголосовать за закрытие как опечатку

Rotimi 17.09.2018 23:53

см. мой ответ, это может вам помочь.

ths 18.09.2018 00:02

Я впервые вижу принятый ответ с отрицательными голосами!

ths 18.09.2018 00:06

@ths Плохой ответ и неопытный спрашивающий :)

RiggsFolly 18.09.2018 01:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
7
5
201
3

Ответы 3

MYSQLI_ASSOC - это число, а не строка. попробуйте с

$array_type = MYSQLI_ASSOC;

Второй параметр является необязательной целочисленной константой и требует целочисленного значения, а не строки, подробности здесь

поэтому вы должны использовать любой из следующих

$array_type = MYSQLI_ASSOC; // 1
$array_type = MYSQLI_NUM; // 2
$array_type = MYSQLI_BOTH; // 3

или

$array_type = 1; //MYSQLI_ASSOC;
$array_type = 2; //MYSQLI_NUM;
$array_type = 3; //MYSQLI_BOTH;

выше 3 константы определены, как показано ниже в MySQLi

define ('MYSQLI_ASSOC', 1);
define ('MYSQLI_NUM', 2);
define ('MYSQLI_BOTH', 3);

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

RiggsFolly 18.09.2018 01:02

@RiggsFolly, я не предлагал третий вариант, я только что описал, что именно так он уже определен PHP :), пожалуйста, прочтите текст выше.

Ashfaque Ali Solangi 18.09.2018 01:11

Ах, теперь я понял.

RiggsFolly 18.09.2018 01:12

Фактически, MYSQLI_ASSOC - это предопределенный PHPconstant (который содержит integer, который помогает классу mysqli_result узнать тип выборки, которую следует использовать). Итак, вам нужно присвоить ее значение переменной $array_type, а не ее имя как string:

$array_type = MYSQLI_ASSOC; // no quotes nor apostrophes.
while($row = mysqli_fetch_array($query, $array_type)) {
  echo $row["name"];
}

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

$array_type = [MYSQLI_ASSOC, MYSQLI_NUM, MYSQLI_BOTH]; // array containing the fetching styles.
/**
* $array_type[0] => associative array.
* $array_type[1] => default array(the indexes are numbers).
* $array_type[2] => the both styles are used.
**/
while($row = mysqli_fetch_array($query, $array_type[0])) {
  echo $row["name"];
}

Надеюсь, я подтолкнул вас к дальнейшему.

Другие вопросы по теме