2017-11-30 20 views
-1

私はこれが準備されたステートメントスクリプトであるという印象を受けましたが、間違っていたようです。これをどうすれば1にすることができますか?準備された声明とは何ですか?これを準備済みのStatementsコードにするにはどうすればよいですか?

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

$sql = "SELECT Status FROM Users WHERE Username = ? AND Password = ?"; 
$stmt = $conn->prepare($sql); 
$stmt->bind_param("ss", $_GET['username'], $_GET['password']); 
$stmt->execute(); 
$result = $stmt->get_result(); 
$rows = $result->fetch_all(MYSQLI_ASSOC); 

if ($result->num_rows > 0) { 
// output data of each row or remove while loop if you wish 
    while($row = $result->fetch_assoc()) { 
     echo "<b style='color:green'>Found</b>"; 
    } 
} else { 
    echo "0 results"; 
} 
$conn->close(); 
?> 
+0

あなたの変数の周りの一重引用符を削除してみてください。 –

+3

これは準備文ではありません – Akintunde007

+1

これは準備されたstatemenetsとは関係がなく、あなたが投稿した内容に明白な構文エラーはありません。具体的には、どのラインにエラーがありますか? – Utkanos

答えて

1

これは、準備済みの文を使用していません。あなただけのユーザー名で選択すると、比較のためのパスワードを取得する検討すべきであるしかし

$sql = "SELECT Status FROM Users WHERE Username = ? AND Password = ?"; 
$stmt = $conn->prepare($sql); 
$stmt->bind_param("ss", $_GET['username'], $_GET['password']); 
$stmt->execute(); 
$result = $stmt->get_result(); 
$rows = $result->fetch_all(MYSQLI_ASSOC); 

- :これはエラーなし/結果のチェックと基本的な例です。そうしない場合は、データベースにパスワードをハッシュする必要があります。そのためには、PHPのpassword_hash()password_verify()を使用してください。後者は、HTMLフォームまたはオリジナルのソースからの投稿パスワードはハッシュ化されたパスワードに一致するかどうかを確認するために使用される一方で、パスワードをハッシュ化に役立つだろう旧

構文は

password_hash($_GET['password'], PASSWORD_DEFAULT); 

password_verify($_GET['password'], $hashedPasswordFromDatabase); 

を格納する列を確認していますパスワードは少なくともvarchar(60)です。

+0

私はこれが何を意味するのか分かりません... mysqliデータベースのパスワードを変更する必要がありますか? –

関連する問題