Php mysql_num_rows变量的值为NULL

Php mysql_num_rows变量的值为NULL,php,mysql,sql,html,Php,Mysql,Sql,Html,$row=mysql\u num\u rows($result)的值为1。这是因为SQL查询找到了1行符合条件。但是,$row[3]正在返回NULL,而我正期待一个散列值。任何帮助都将不胜感激。所以我的问题是,为什么$row[3]保存的是null的值,而不是SQL数据库中预期的哈希值 <?php include('config.php'); $email = $_POST['email']; $password = $_POST['password'];

$row=mysql\u num\u 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>';
    }

?>

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

也就是说,$row变量包含mysql\u num\u rows()返回的数字。它不包含行数据

要获取仅包含数字键的行数据数组,需要使用mysql\u fetch\u row()


此处有更多文档:

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

也就是说,$row变量包含mysql\u num\u rows()返回的数字。它不包含行数据

要获取仅包含数字键的行数据数组,需要使用mysql\u fetch\u row()

更多文档请点击此处:

  • 您已经将
    $row
    定义为mysql\u num\u rows,这意味着它不再是一个值,而是一个行计数,并且只有一个值;没有更多的
    行[3]
  • 如果确实需要该行的值,则需要在
    mysql\u num\u行之前调用它

  • 你真的不应该使用
    mysql\uu
    函数;它们已被弃用(理由很充分;它们非常容易受到sql注入的攻击,并且很快就会停止工作),您应该查找
    mysqli\uuu
    。这是你要数一数的信息
  • 为了获得你所追求的价值,你需要做这样的事情

     while ($row = mysqli_fetch_row($result)) {
           echo $row[3];
    
    }
    
    有一些更好的方法可以做到这一点,特别是使用面向对象的风格和预先准备好的语句(消除了sql注入的大部分风险、更快的查询、无需转义变量等)。不过,通过上述方法,您可以得到所需的结果

  • 您已经将
    $row
    定义为mysql\u num\u rows,这意味着它不再是一个值,而是一个行计数,并且只有一个值;没有更多的
    行[3]
  • 如果确实需要该行的值,则需要在
    mysql\u num\u行之前调用它

  • 你真的不应该使用
    mysql\uu
    函数;它们已被弃用(理由很充分;它们非常容易受到sql注入的攻击,并且很快就会停止工作),您应该查找
    mysqli\uuu
    。这是你要数一数的信息
  • 为了获得你所追求的价值,你需要做这样的事情

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

    有一些更好的方法可以做到这一点,特别是使用面向对象的样式和预先准备好的语句(消除sql注入的大部分风险、更快的查询、无需转义变量等)。但是,您可以通过上面的方法得到您想要的。

    正如您所说的“sql查询找到了1行条件”,因此$row[3]将不会设置为空值。据我所知,在您的代码中,您可能需要这样的$row[1]->密码(取决于名称列)@RRayasa$row[3]应该保存4列的值,是的,要查看所有错误,您必须通过在最顶部添加
    error\u reporting(-1)
    来打开错误报告,以保存需要首先获取的列中的值,通过
    mysql\u fetch\u assoc($result)
    while
    loop@bad_boymysql_fetch_assoc($result)将只返回关联键,而不是数字键。正如您所说的“sql查询已找到1行符合条件”,因此不会设置$row[3],因此它具有空值。据我所知,在您的代码中,您可能需要这样的$row[1]->密码(取决于名称列)@RRayasa$row[3]应该保存4列的值,是的,要查看所有错误,您必须通过在最顶部添加
    error\u reporting(-1)
    来打开错误报告,以保存需要首先获取的列中的值,通过
    mysql\u fetch\u assoc($result)
    while
    loop@bad_boymysql_fetch_assoc($result)将只返回关联键,而不是数字键。这很好。然而,我并不是在开玩笑说,mysql的函数被弃用了,正如另一个答案所说的那样。我会完全避免使用它们来防止养成坏习惯:)那很好。然而,我并不是在开玩笑说,mysql的函数被弃用了,正如另一个答案所说的那样。我会尽量避免使用它们来防止养成坏习惯:)