$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>';
}
?>
答案 0 :(得分:3)
mysql_ *函数,所以请不要再使用它们了。请改用PDO_mysql或MySQLi。
这就是说,你的$ row var包含mysql_num_rows()返回的数字。它不包含行数据。
要仅使用数字键获取行数据数组,您需要使用mysql_fetch_row()。
答案 1 :(得分:1)
$row
定义为mysql_num_rows,这意味着它不再是值,它是行的计数,并且只有一个值;没有更多row[3]
如果您真的想要该行的值,则需要在mysql_num_rows
mysql_
函数;他们被弃用了(非常好的理由;他们非常容易受到sql注入,很快就会停止工作)你应该查找mysqli_
。如果您只是想要计算,请参阅mysqli_num_rows上的信息。要获得您所寻求的价值,您需要做类似的事情
while ($row = mysqli_fetch_row($result)) {
echo $row[3];
}
有一些更好的方法可以做到这一点,特别是使用面向对象的样式和使用预处理语句(消除sql注入的大多数风险,更快的查询,不需要转义变量等)。请参阅mysqli prepared statements,但是你可以通过以上方式得到你想要的东西。