#php #mysqli
#php #mysqli
Вопрос:
Итак, я пытаюсь создать несколько «результирующих» массивов и заполнить их результатами моего оператора внутри «основного» массива.
Однако, похоже, что результирующие массивы перезаписываются каждый раз при прохождении цикла вместо создания дополнительного массива.
Мой код:
function retrieve_clients() {
$coach_id = $_SESSION['user_details']['id'];
$connection = connection();
$statement = select($connection, '*', 'relations', 'coach_id', '=');
$statement->bind_param('i', $coach_id);
if ($statement->execute()) {
$statement->bind_result($id, $coach_id, $client_id, $relation_date);
while ($statement->fetch()) {
$_SESSION['clients'] = array(
array($id, $coach_id, $client_id, $relation_date)
);
}
}
$statement->close();
}
Я больше не могу в этом разобраться. Пожалуйста, избавьте меня, потому что я все еще новичок в программировании.
Комментарии:
1. Какую библиотеку базы данных вы использовали для «select ()»
2. Вот ссылка на руководство по PHP, в котором описывается, как добавлять элементы в массивы.
Ответ №1:
Вам нужно добавить еще одно измерение для ваших клиентов, добавив []
в конец переменной.
$_SESSION['clients'][] = array(
array($id, $coach_id, $client_id, $relation_date)
);
Ответ №2:
Я думаю, что другие ответы находятся на правильном пути, однако они добавляют ненужное и, вероятно, нежелательное измерение. Попробуйте добавить динамическое измерение с []
помощью, но удалите одно из array
измерений, которое перезаписывает:
$_SESSION['clients'][] = array($id, $coach_id, $client_id, $relation_date);
Комментарии:
1. Упс, я это пропустил. Хороший улов!
Ответ №3:
Это потому, что вы заменяете значение clients в следующей строке,
$_SESSION['clients'] = array(
array($id, $coach_id, $client_id, $relation_date)
);
Что вам нужно сделать, это сначала создать массив клиентов перед циклом, а затем добавить каждый массив в основной массив.
Вот так,
$_SESSION['clients']=array();
while ($statement->fetch()) {
$_SESSION['clients'][] = array(
array($id, $coach_id, $client_id, $relation_date)
);
Комментарии:
1.
$_SESSION
сам по себе массив. Нет необходимости объявлять его.2. 1 для инициализации
$_SESSION['clients']
. Я думаю, что это хорошая идея, даже если это не является абсолютно необходимым. Таким образом, если запрос ничего не возвращает$_SESSION['clients']
, вместо неопределенного индекса будет пустой массив.3. Да, именно поэтому я инициализировал его как массив.
Ответ №4:
Сделайте себе одолжение, прекратите использовать mysqli (а также эту самодельную функцию «select»).
С PDO у вас будет нормальный код:
function retrieve_clients() {
$sql = "SELECT * FROM relation WHERE coach_id = ?";
$statement = connection()->prepare($sql); // here goes your SQL
$statement->execute([$_SESSION['user_details']['id']]); // here goes a parameter
$_SESSION['clients'] = $statement->fetchAll(); // and here you have your array
}
Комментарии:
1. Подготовленные инструкции намного проще с PDO.