Если то, что вы сохранили в базе данных является SHA1 контрольная сумма, то это то, что вам нужно будет сравнить.
Данные довольно отрывочные.
Предполагая, что строка была сохранена в базе данных
INSERT INTO `account` (`username`, `sha_pass_hash`, ...
VALUES ('Meko', SHA1('Meko:1234'), ...
Затем, чтобы проверить наличие этой строки, учитывая:
$user_username = 'Meko' ;
$user_password = '1234' ;
если те ценности, которые вы хотите передать в база данных запроса, а затем
$sql = 'SELECT ...
FROM account a
WHERE a.username = ?
AND a.sha_pass_hash = SHA1(CONCAT(? ,':', ?)';
$sth = $dbh->prepare($sql);
$sth->bindValue(1,$user_username, PDO::PARAM_STR);
$sth->bindValue(2,$user_username, PDO::PARAM_STR);
$sth->bindValue(3,$user_password, PDO::PARAM_STR);
$sth->execute();
if($row = $sth->fetch(PDO::FETCH_ASSOC)) {
// matching row found
} else {
// no matching row found
}
$sth->closeCursor();
Если вы не использовали функцию MySQL SHA1 и использовали некоторую другую функцию для вычисления хэша, используйте эту же функцию, когда вы выполняете проверку.
То есть, если строка была вставлена в заявлении формы больше как
INSERT INTO account (username, sha_pass_hash, ...)
VALUES ('Meko','7c4d046a92c441c426ce86f15fa9ecd1fc1fd5f1', ...)
Затем, чтобы проверить наличие этой строки, учитывая:
$user_username = 'Meko' ;
$user_password = '1234' ;
Тогда ваш запрос к проверка наличия строки будет примерно такой:
$sql = 'SELECT ...
FROM account a
WHERE a.username = ?
AND a.sha_pass_hash = ?';
вычислить хэш пароля, то же самое способ, как когда он был первоначально сделан
$user_sha_hash = sha1($user_username . ':' . $user_password) ;
И подготовить и выполнить запрос, передавая в ША контрольной строке
$sth = $dbh->prepare($sql);
$sth->bindValue(1, $user_username, PDO::PARAM_STR);
$sth->bindValue(2, $user_sha_hash, PDO::PARAM_STR);
$sth->execute();
if($row = $sth->fetch(PDO::FETCH_ASSOC)) {
//
} else {
//
)
$sth->closeCursor();
Ответ на ваш вопрос 'CONCAT()'. Фактический ответ - исправить ваши данные с помощью сценария миграции. – CodeCaster
Вы действительно храните пароли как обычный текст? Это очень опасно. – symcbean
Нет, я не хранил пароли как обычный текст. Пароли находятся в sha1 – Kh4zy