php password_verify ne fonctionne pas avec la base de données

Je suis à l'aide de php 5.4 avec cette rétro-compatibilité script: https://github.com/ircmaxell/password_compat/blob/master/lib/password.php

qui ne devrait pas grave, parce que je peux obtenir le hachage et la vérification des processus de travail dans ma fonction d'enregistrement:

$hash = password_hash($pass, PASSWORD_DEFAULT);

echo $pass;
echo $hash;

if( password_verify($pass,$hash) )
    echo 'success';
else echo 'failure';

//success is always shown

//EXAMPLE INPUT
$pass = 'password';

//EXAMPLE OUTPUT
password$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYSsuccess

mais chaque fois que j'essaie de stocker la valeur de hachage dans une base de données MySQL puis de la récupérer pour la fonction vérifier, il échoue toujours. Voici ma fonction de connexion:

function user_login( $mysqli, $email, $pass ){    

        $err_msg = 'login: '.$mysqli->error.' | '.$email;

        if( $stmt = $mysqli->prepare('SELECT password FROM users WHERE email=?') ) :

            if( !$stmt->bind_param('s', $email) ) log_sql_error( $err_msg );
            if( !$stmt->execute() ) log_sql_error( $err_msg );
            if( !$stmt->bind_result( $hash ) ) log_sql_error( $err_msg );
            if( $stmt->fetch() === FALSE ) log_sql_error( $err_msg );
            if( !$stmt->close() ) log_sql_error( $err_msg );

            //I can see that these values are identical to the ones
            //echoed out in the registration function
            echo $pass;
            echo $hash;

            if( password_verify($pass,$hash) )
                echo 'success';
            else echo 'failure';

        else : log_sql_error( $err_msg );
        endif;
}
//failure is always shown

//EXAMPLE INPUT
$pass = 'password';

//EXAMPLE OUTPUT
password$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYSfailure

Mon "mot de passe" de la colonne a ce type de données: VARCHAR(255) NOT NULL

Pas afficher les erreurs php, et la seule chose que je peux penser, c'est que la valeur de hachage n'est pas formaté de la même manière quand il s'agit de la base de données que lorsqu'il est allé, mais quand je reprends les valeurs, ils semblent être identiques.

Sinon, comment puis-je déboguer ce /quel est le problème avec mon code?

Grâce

Mise à JOUR:

Cela a sans doute quelque chose à voir avec le codage:

$hardcode_hash = '$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYS';

echo $hash;
echo '<br/>';
echo $hardcode_hash;
echo '<br/>';

if( $hash == $hardcode_hash )
    echo 'success';
else echo 'failure';

//OUTPUT
$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYS
$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYS
failure

comment dois-je reformater le SQL de la valeur pour correspondre à la sortie de password_hash? Voici ce que j'ai essayé:

(string)$hash
utf8_encode($hash)

si je fais:

$hash = settype($hash,"string");

if($hash == $hardcode_hash) retourne vrai, mais password_verify($pass, $hash) renvoie toujours false

source d'informationauteur Cbas