У меня есть только одно текстовое поле, в котором пользователь может ввести имя пользователя или адрес электронной почты, чтобы сбросить пароль.
Во-первых, вот код: (я включил только тот код, который мне известен, где находится проблема).
try {
// connect to database
$dbh = sql_con();
// prepare query
$stmt = $dbh->prepare("
SELECT COUNT(*)
FROM
users
WHERE
user_login = :username
OR
user_email = :email
");
// execute query
$stmt->execute(array(':username' => $username_email, ':email' => $username_email));
if ($stmt->fetchAll() > 0) {
// something was found
// just echoing at the moment until i figure out what i am doing wrong
echo 'i found something';
exit;
} else {
// nothing found
echo 'i found nothing';
exit;
}
}
catch (PDOException $e) {
ExceptionErrorHandler($e);
require_once($footer_inc);
exit;
}
Не уверен, что я делаю неправильно, возможно, что-то очень глупое, но когда я ввожу имя пользователя или адрес электронной почты, которого, как я знаю, нет в базе данных, он все равно выдает echo
es Я что-то нашел.
Что я делаю неправильно?
Я собирался использовать rowCount
, но, как было предложено в руководстве по PHP, он гласит:
PDOStatement::rowCount()
возвращает количество строк, затронутых последним операторомDELETE
,INSERT
илиUPDATE
, выполненным соответствующим объектом PDOStatement.
Если последним оператором SQL, выполненным соответствующимPDOStatement
, был операторSELECT
.
, некоторые базы данных могут возвращать количество строк, возвращаемых этим оператором.
Однако такое поведение не гарантируется для всех баз данных, и на него не следует полагаться для переносимых приложений.
Таким образом, в руководстве по PHP говорится, что я должен сделать Count(*)
перед выполнением моего реального запроса, а затем работать с результатом.