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的函数被弃用了,正如另一个答案所说的那样。我会尽量避免使用它们来防止养成坏习惯:)