Чтобы сохранить динамический тип массива в запросе 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, если это возможно.
Проголосовать за закрытие как опечатку
см. мой ответ, это может вам помочь.
Я впервые вижу принятый ответ с отрицательными голосами!
@ths Плохой ответ и неопытный спрашивающий :)






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, я не предлагал третий вариант, я только что описал, что именно так он уже определен PHP :), пожалуйста, прочтите текст выше.
Ах, теперь я понял.
Фактически, 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"];
}
Надеюсь, я подтолкнул вас к дальнейшему.
MYSQLI_ASSOC- это постоянная величина.