2016-11-10 4 views
1

Ich kann nicht herausfinden, wie die Anzahl der Zeilen aus der Datenbank mit meiner Abfrage abrufen, wenn ich die Abfrage ausführen Es gibt nur 0 zurück, obwohl es in meiner Datenbank istAnzahl der Zeilen in der Datenbank - vorbereitete Anweisungen - 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; 

Kann mir jemand irgendwelche Hinweise geben? Kann nicht sehen, um meinen Kopf darum zu wickeln, danke.

Btw, der $ Hash wurde bereits vor dieser Aussage abgefragt.

+0

'password_verify' tun, nicht einen Hash zurück, sondern ein boolean. – Jeff

+0

@jeff Ich verengte die Abfrage nur auf den Benutzernamen und es gibt immer noch 0 – stepho

+0

Welche DB-Schnittstelle ist das? – Jeff

Antwort

0

dieses Posting als Community Wiki:

hinzufügen $stmt->store_result(); nach dem execute()

+0

jemand willkommen zu bearbeiten/hinzufügen; Ich möchte nicht von dieser Aussage abweichen –

0

Als ich nehme an, Sie password_hash verwendet haben() auf dem Passwort, das Sie in der Datenbank speichern. Dann sollten Sie es nicht in einem Suchkriterium verwenden. Das erneute Hashing des gleichen Strings generiert nicht den gleichen Hash mit password_hash(), da jedes Mal ein anderer SALT verwendet wird. Deshalb ist es das empfohlene Hashing-Tool.

Sie müssen also so etwas wie dieses

$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(); 
} 
Verwandte Themen