Я создаю страницу входа, где имя пользователя может быть именем учащегося или учителя, где имена учеников просто числовые (т.е. 45678). Я сделал функцию account_type($user)
, которая просто возвращает «ученик», если $user
числовой, и «учитель», если нет.
Изменить: Чтобы уточнить, учащиеся будут вводить свой SID (т. Е. 12345) для входа в систему, и поэтому моя функция account_type()
определит, что они являются студентами. Таким образом, запрос MySQL для доступа к учетной записи учащегося отличается от запроса на доступ к учетной записи учителя, где требуется адрес электронной почты.
Вход учащегося работает нормально с указанными параметрами, но когда я пытаюсь использовать строку и ищу письмо, я получаю сообщение об ошибке:
Invalid parameter number: parameter was not defined
Я пытался поставить кавычки вокруг :user
в запросе, но это не помогло. Я трижды проверил, что запросы верны, и они работают на MySQL. Есть идеи, что мне делать? Очевидный ответ - использовать mysqli или не использовать именованные параметры, но я надеюсь, что позже он будет работать с именованными параметрами для более сложных запросов.
Вот мой код:
try {
$pdo = new PDO($dsn, DB_USERNAME, DB_PASSWORD);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
die("Could not connect to database. " . $e->getMessage());
}
$user = mysqli_real_escape_string($link, $_POST['user']);
$pass = mysqli_real_escape_string($link, $_POST['pass']);
$account_Type = account_type($user);
if ($account_Type == "student") {
$query = "SELECT id, password FROM students WHERE sid = :user";
}
else if ($account_Type == "teacher") {
$query = "SELECT id, password FROM staff WHERE email = :user";
}
$stmt = $pdo->prepare($query);
$stmt->execute([
':user' => $user
]);
Заранее спасибо!