2016-11-10 11 views
1

クエリを実行するたびに、データベースから行数を取得する方法がわかりません。データベースにあってもゼロを返します。データベース内の行数 - プリペアドステートメント - PHP

$username = $_POST['username']; 
$hash = password_verify($password, $passwordcheck); 

if($stmt = $conn -> prepare("SELECT username, email, password FROM users WHERE (username = ? OR email = ?) AND password = ?")) 
{ 

    $stmt -> bind_param("sss", $username, $username, $hash); 
    $stmt -> execute(); 

    $stmt -> bind_result($checkedUsername, $checkedEmail, $checkedPassword); 

    $stmt -> fetch(); 
    $numberofrows = $stmt->num_rows; 

    $stmt -> close(); 
} 
echo '# rows: '.$numberofrows; 

誰でも私に何かヒントを教えてもらえますか?ありがとう、私の頭を包んで見ることができない、ありがとう。

Btwの場合、$ hashはこのステートメントの前にすでに照会されています。コミュニティのwikiとしてこれを投稿

+0

ような何かをする必要があります。 – Jeff

+0

@jeff私はちょうどユーザー名にクエリを絞り込み、それでも0を返します – stepho

+0

どのようなdbインターフェイスですか? – Jeff

答えて

0

:私はあなたがデータベースに格納パスワードにpassword_hashを()を使用したと仮定したよう

はあなた​​

+0

誰でも編集/私はこれから担当者を望んでいない –

0

$stmt->store_result();を追加します。次に、検索条件でそれを使用するべきではありません。同じ文字列を再ハッシングすると、password_hash()を使用して同じハッシュが生成されることはありません。実行するたびに異なるSALTを使用するため、推奨されるハッシュツールです。

だから、 `password_verify`はハッシュが、ブール値を返しません。この

$username = $_POST['username']; 

$stmt = $conn->prepare("SELECT username, email, password 
         FROM users WHERE (username = ? OR email = ?)") 
if($stmt) { 

    $stmt->bind_param("ss", $username, $username); 
    $stmt->execute(); 

    // As per @fred-ii- comment 
    $stmt->store_result(); 

    $stmt->bind_result($checkedUsername, $checkedEmail, $checkedPassword); 

    $stmt->fetch(); 

    echo '# rows: ' . $stmt->num_rows; 

    if (password_verify($_POST['password'], $checkedPassword)) { 
     // password is correct 
    } else { 
     // password is NOT correct 
    } 

    $stmt -> close(); 
} 
関連する問題