试图确定一个值是否存在于这样的数组中:
$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在sessions['session_id']数组中,因为当我回显数组时,我可以看到该值。但是,该函数仍然返回"无效会话"。这不是使用in_array函数的正确方法吗?
->fetch()
总是返回一行,因此您必须循环遍历每个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";
}