Попытка определить, существует ли в массиве значение:
$course_id = 1;
$sessions_query = $db->prepare("SELECT session_id FROM sessions WHERE course_id=:course_id");
$sessions_query ->bindValue(':course_id', $course_id, PDO::PARAM_INT);
$sessions_query ->execute();
$sessions = $sessions_query ->fetch(PDO::FETCH_ASSOC);
$session_id = 1;
if (in_array($session_id, $sessions['session_id'])) {
echo "Valid session";
}
else {
echo "Invalid session";
}
Я знаю, что значение 1 находится в массиве сессий ['session_id'], потому что, когда я эхо-массив, я вижу это значение. Однако функция по-прежнему возвращает "недействительный сеанс". Разве это не правильный способ использования функции in_array?
->fetch()
всегда возвращает одну строку, поэтому вам придется session_id
каждый session_id
. Вы бы сделали что-то вроде этого:
Отредактировано: эффективный подход
Предположим, что таблица ваших sessions
имеет 1000 записей, а ваши $session_id
соответствуют первой записи в таблице. В этом случае цикл while()
не будет оцениваться 1000 раз, когда совпадение найдено, оно вырвется из цикла.
$course_id = 1;
$sessions_query = $db->prepare("SELECT session_id FROM sessions WHERE course_id=:course_id");
$sessions_query ->bindValue(':course_id', $course_id, PDO::PARAM_INT);
$sessions_query ->execute();
$session_id = 1;
$session_value_exists = false;
while($sessions = $sessions_query->fetch(PDO::FETCH_ASSOC)){
if ($session_id == $sessions['session_id'])) {
$session_value_exists = true;
break;
}
}
if($session_value_exists){
echo "valid session";
}else{
echo "invalid session";
}
Поскольку PDOStatement::fetch()
возвращает одну строку, вам необходимо выполнить цикл над возвращаемым набором, чтобы сначала создать массив.
$course_id = 1;
$sessions_query = $db->prepare("SELECT session_id FROM sessions WHERE course_id=:course_id");
$sessions_query ->bindValue(':course_id', $course_id, PDO::PARAM_INT);
$sessions_query ->execute();
$sessions = array();
while($row = $sessions_query ->fetch(PDO::FETCH_ASSOC)){
$sessions[] = $row['session_id'];
}
$session_id = 1;
if (in_array($session_id, $sessions)) {
echo "Valid session";
}
else {
echo "Invalid session";
}
sessions
имеет 1000 записей, а session_id
пользователя соответствует 1-й записи, даже в этом случае цикл while()
будет оцениваться 1000 раз. Скорее, когда совпадение найдено, оно должно выйти из цикла.
course
было 1000 человек, я мог бы перейти в другой школьный класс.
->fetch()
возвращает 1 строку. Вам нужно сделать это в цикле, чтобы создать массив, или использовать->fetchAll()
и проверить этот массив.