mysql_num_rows变量保持值为NULL

时间:2015-05-17 11:18:58

标签: php mysql sql html5

$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>';
    }

?>

2 个答案:

答案 0 :(得分:3)

不推荐使用

mysql_ *函数,所以请不要再使用它们了。请改用PDO_mysql或MySQLi。

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

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

此处提供更多文档:php.net mysql_fetch_row() documentation

答案 1 :(得分:1)

  1. 您已将$row定义为mysql_num_rows,这意味着它不再是值,它是行的计数,并且只有一个值;没有更多row[3]
  2. 如果您真的想要该行的值,则需要在mysql_num_rows

    之前调用它
    1. 你真的不应该使用mysql_函数;他们被弃用了(非常好的理由;他们非常容易受到sql注入,很快就会停止工作)你应该查找mysqli_。如果您只是想要计算,请参阅mysqli_num_rows上的信息。
    2. 要获得您所寻求的价值,您需要做类似的事情

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

      有一些更好的方法可以做到这一点,特别是使用面向对象的样式和使用预处理语句(消除sql注入的大多数风险,更快的查询,不需要转义变量等)。请参阅mysqli prepared statements,但是你可以通过以上方式得到你想要的东西。