#php #sql
#php #sql
Вопрос:
Я на 90% уверен, что проблема в синтаксисе sql, но, похоже, не могу определить, где именно. Sql возвращает правильное электронное письмо, однако пароль возвращается пустым. Я пытался использовать другой столбец в базе данных, но у меня та же проблема.
Примечание: пароль хэшируется в БД.
Код:
$sql = $link->prepare('SELECT email, password FROM users WHERE email=:email');
$sql->bindParam(':email', $email);
$sql->execute();
$resultemail = $sql->fetchColumn();
$resultpassword = $sql->fetchColumn(1);
if (!$resultemail){
echo "empty";
} else {
echo $resultemail;
}
if (!$resultpassword){
echo "empty";
} else {
echo "$resultpassword";
}
Ответ №1:
При каждом вызове fetchColumn
он переходит к следующей строке результирующего набора и извлекает указанный столбец из этой строки (по умолчанию используется столбец 0). Итак, вы устанавливаете $resultemail
значение в первый столбец первой строки результатов и $resultpassword
в первый столбец второй строки результатов. Но поскольку запрос возвращает только одну строку, вы устанавливаете $resultpassword
значение false
.
Вы должны извлечь всю строку и установить переменные в соответствующие столбцы этой строки.
$row = $sql->fetch(PDO::FETCH_ASSOC);
if ($row) {
$resultemail = $row['email'];
$resultpassword = $row['password'];
if (!$resultemail){
echo "empty";
} else {
echo $resultemail;
}
if (!$resultpassword){
echo "empty";
} else {
echo "$resultpassword";
}
} else {
echo "empty";
}
Комментарии:
1. Сейчас я получаю это сообщение об ошибке. Вызов неопределенного метода PDOStatement::fetchAssoc().
2. Понял, просто заменил fetchAssoc() на fetch(PDO::FETCH_ASSOC). Итак .. вопрос новичка. Разница между двумя методами заключается в том, что fetchAssoc() является процедурным, а fetch() — ооп?
3. Да, извините. Сложно поддерживать все различные API-интерфейсы.
4. Ха-ха, вторая проблема, которую вы исправили для меня сегодня, я ценю вашу помощь