#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);
}