2016-11-10 2 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; 

Может ли кто-нибудь дать мне какие-либо намеки? Спасибо, спасибо.

Квт, этот хэш уже был запрошен до этого утверждения.

+0

'password_verify' не возвращает хэш, а логическое значение. – Jeff

+0

@jeff Я просто сузил запрос до имени пользователя, и он все равно возвращает 0 – stepho

+0

, что такое интерфейс db? – Jeff

ответ

0

Проводка это как сообщества вики:

добавить $stmt->store_result(); после execute()

+0

кто-нибудь может отредактировать/добавить к этому; Я не хочу повторять это –

0

Как я предполагаю, что вы использовали password_hash() на пароль хранятся в базе данных. Тогда вы не должны использовать его в критериях поиска. Повторная хэширование одной и той же строки не будет генерировать один и тот же хеш с помощью password_hash(), поскольку при каждом запуске он будет использовать различную ОСВ. Вот почему его рекомендуемый хэширующий инструмент.

Так что вам нужно сделать что-то вроде этого

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