$row = mysql_num_rows($result); 具有预期的1的值。 这是因为SQL查询已找到1条符合条件的行。 但是,当我期望哈希值时, $row[3]返回NULL 任何帮助将不胜感激。 所以我的问题是,为什么$row[3]保留null值,而不是SQL数据库中预期的哈希值?

<?php 

    include('config.php');

    $email = $_POST['email'];
    $password = $_POST['password'];

    $query = "SELECT * FROM users WHERE email='$email';";
    $result = mysql_query($query);
    $row = mysql_num_rows($result);
    $password_relative = $row[3];

    echo "Row Value: ".$row."<br>";
    var_dump($password_relative); // holding null???
    var_dump($row); // holding 1 as intended

    echo "Inputed Password: ".$password."<br>";
    echo "Password Value On Server:".$password_relative."<br>";

    if ($row > 0) {
        // password_verify(password, hash);
        if(password_verify($password, $password_relative)) {
            // set seesion variables
            echo 'Successful sign in<a class="link" href="index.php">Go to dashboard</a>';
        } else {
            echo 'Password is wrong!<a class="link" href="SignIn.php">Go to sign in</a>';
        }
    } else {
        echo 'The details given show that you do not have an account with us<a class="link" href="SignIn.php">Go to sign in</a>';
    }

?>

===============>>#1 票数:3 已采纳

mysql_ *函数已被弃用,因此请不要再使用它们。 请改用PDO_mysql或MySQLi。

就是说,您的$ row var包含mysql_num_rows()返回的数字。 它不包含行数据。

要仅使用数字键获取行数据数组,则需要使用mysql_fetch_row()。

更多文档在这里: php.net mysql_fetch_row()文档

===============>>#2 票数:1

  1. 您已经将$row定义为mysql_num_rows,这意味着它不再是一个值,它是行的计数,并且只有一个值; 没有更多的row[3]

如果您确实想要该行的值,则需要在mysql_num_rows之前调用它

  1. 您确实不应该使用mysql_函数。 不推荐使用它们(出于很好的理由;它们极易受到sql注入的攻击,并且将很快停止工作)。您应该查找mysqli_ 如果您只想计数,这是有关mysqli_num_rows的信息。

为了获得您想要的价值,您需要做这样的事情

 while ($row = mysqli_fetch_row($result)) {
       echo $row[3];

}

有一些更好的方法可以做到这一点,特别是使用面向对象的样式和使用预准备的语句(消除了大多数SQL注入风险,更快的查询,无需转义变量等)。请参见mysqli预准备的语句 ,但是您可以得到想要的以上。

  ask by IP Address translate from so

未解决问题?本站智能推荐: