Отображение имен значений из sql-запроса в массиве php

#php #mysqli

#php #mysqli

Вопрос:

Я создал функцию для получения всех пользователей из моей базы данных $allUsers = selectAllUsers($conn);

Эта функция работает хорошо, и var_dump выдает мне такой массив

 array(49) { [0]=> array(4) { [0]=> int(1) [1]=> string(15) "Thomas Anderson" [2]=> string(16) "thomas@gmail.com" [3]=> string(4) "Thom" } [1]=> array(4) { [0]=> int(2)
  

Теперь я создал цикл foreach, который хорошо работает для отображения данных следующим образом

 <?php
  var_dump(selectAllUsers($conn));
  $allUsers = selectAllUsers($conn);
  if ($allUsers) {
   $i = 0;
   foreach ($allUsers as $key) {
    $i  ;
?>
    <tr>
        <td><?php echo $key[0] ?></td>
        <td><?php echo $key[1] ?></td>
        <td><?php echo $key[2] ?></td>
        <td><?php echo $key[3] ?></td>
    </tr>
<?php
   }
  }
?>
  

Мои поля из базы данных пользователей: users_id, users_name, users_email, users_uid

Но я хочу что-то вроде этого, чтобы назвать поля. К сожалению, я получил ошибку от php "Undefined index: users_id in"

 foreach ($allUsers as $key) {
    $i  ;
    <tr>
        <td><?php echo $key["users_id"] ?></td>
        <td><?php echo $key["users_name"] ?></td>
        <td><?php echo $key["users_uid"] ?></td>
        <td><?php echo $key["users_email"] ?></td>
    </tr>
<?php
  

Как я могу это сделать?

Здесь моя функция:

 function selectAllUsers($conn)
{
    $sql = "SELECT users_id, users_name, users_email, users_uid FROM users ORDER BY users_id ASC;";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $resultSet = $stmt->get_result();
    $result = $resultSet->fetch_all();
    if ($result) {
        return $result;
    }
}
  

Комментарии:

1. Затем вы должны начать с извлечения данных из результирующего набора в виде ассоциативного массива, а не численно индексированного.

2. Да, используется $resultSet -> fetch_all(MYSQLI_ASSOC); для получения имен столбцов. По умолчанию он возвращает числовой массив, как вы видите.

Ответ №1:

Если вы хотите использовать ассоциативные ключи, вам нужно извлечь ассоциативный массив из mysqli_result. Используйте это:

 $resultSet->fetch_all(MYSQLI_ASSOC);
  

Если вы хотите иметь как числовые, так и ассоциативные ключи, вы можете использовать:

 $resultSet->fetch_all(MYSQLI_BOTH);
  

Кроме того, я хотел бы отметить, что ваше if утверждение в этой функции не очень полезно. Вы можете удалить его. Затем ваша функция может стать:

 function selectAllUsers($conn)
{
    $sql = "SELECT users_id, users_name, users_email, users_uid FROM users ORDER BY users_id ASC;";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    return $stmt->get_result()->fetch_all(MYSQLI_BOTH);
}