mysqli prepare文を使用してハッシュされたパスワードを検索して、テーブルからuser_idを取得します。mysqliプリペアドステートメントを使用してハッシュされたパスでuser_idを取得する
私はだから私は準備された文で何の問題もないが、問題は私のハッシュされたパスワードと一致するように、このですが、私が入力したパスワードを
$input_password = crypt($password,$database_pass);
を取らなければならないプリペアドステートメントは例えば
$query = "SELECT `colour` FROM `pallet`";
$query.=" Where `colour`=? "
$stmt = $db->prepare($query);
$stmt->bind_param('s',$colour="blue");
$stmt->execute();
$stmt->bind_result($colour);
while($stmt->fetch())
snip
をどのように動作するかを知っています
と一致する前にハッシュしてください。だから私は、私はそれをバインドする前に、データベースから$ database_passを取得する必要があるとして、私は、明らかにこれは動作しません。この
$query = "SELECT `password` FROM `log`";
$query.=" Where `password`=? "
$stmt = $db->prepare($query);
$stmt->bind_param('s',crypt($password,$database_pass));
$stmt->execute();
$stmt->bind_result($colour);
ような何かをしようと思いました。私は一度にすべてをやろうとしています。
私は準備済みのテーブルを使用していませんでしたが、パスワードを取得して後でループでチェックしていましたが、可能な限りすべてを1つにすることでこれを改善したいと考えています。
私はいつも何か一方的な方法で解決し、後でそれを改善しようとしますが、私はこの問題を抱えています。
私は別のやりかたをしましたが、新しいコードの問題は、比較する前にテーブル全体を読み取る必要があることです。私はwhere節でそれをやりたいのですが、それは必要なデータだけを取得するからです。
一つは、データベース内の適切塩漬けのパスワードを検索することはできません Global $db;
$query = "SELECT `temp_pass`,`user_id` FROM `".$database."`.`logon`";
$stmt = $db->prepare($query);
$stmt->execute();
$stmt->bind_result($temp_pass,$user_id);
while ($stmt->fetch()) {
$input_password = crypt($password,$temp_pass);
if($input_password == $temp_pass):
return $user_id;
break;
endif;
}
なぜdatabase_passをフェッチして比較するのはなぜですか? –
それはそのようには機能しません。 1つのデータベース・パスだけではありません。 cryptデータベースのパスをハッシュに使用します。ハッシュされたパスワードはデータベースに格納されます。私の古い方法は、msqliを使ってすべての行をフェッチし、ループを通ってパスワードを見つけることですが、コードを少なくして実行しようとしています。ユーザーがパスワードを入力すると、パスワードをデータベースにハッシュする必要があるため、一致を実行できます。 –
私はインナーセレクトが答えかもしれないと考えています。ちょうどそれを解決する必要があります –