mysqli_data_seek函数返回用户名结果,当用户名不在数据库中时

时间:2014-10-28 02:51:17

标签: php mysql mysqli

我有一个函数,如果一个命名用户在我的数据库中,我会在屏幕上显示一个字符串值的消息,只是说我的函数有效。

但是,当我将名称更改为数据库中不存在的名称时,我仍然会得到一个表示该函数有效的字符串输出。所以我试图弄清楚我的逻辑在查询中的混乱程度。这就是我所拥有的:

Users.php文件:

<?php

function user_exists($username)
{
    $db = "adults";
    $dbH = "localhost";
    $dbU = "root";
    $dbP = "Jeffery9";

    //connection to database
    $dbCon =  mysqli_connect($dbH, $dbU, $dbP, $db);

    $username = sanitize($username);
    // $query = mysqli_query($dbCon,"SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'");
    return (mysqli_data_seek(mysqli_query($dbCon,"SELECT COUNT(`user_id`) FROM `users`   WHERE `username` = '$username'"), 0) == 1) ? true : false;
}

?>

现在这里是登录页面,它处理函数以查看用户是否确实存在:

Login.php文件:

<?php
include 'core/init.php';

if (user_exists('raiders7') === true)
{
    echo 'user found!';
}
die();

if(empty($_POST) === false)
{
    $username = $_POST['username'];
    $password = $_POST['password'];

    if(empty($username) === true || empty($password) === true)
    {
        $errors[] = 'You need to enter a username and password.';   
    }
    else if (user_exists($username) === false)
    {
        $errors[] = 'We can\'t find that username. Have you registered?';
    }
}
?>

当然,我在数据库中有一行和一个用户。当字符串为user_exists('raiders7')时,我会在索引页面上显示user found!

但是当它user_exists('something else')时,它仍会在页面上返回user found!

这是怎么回事?如果用户不存在,页面应为空白。

最后,我使用其他功能来清理我的数据:

General.php文件:

<?php

function sanitize($data)
{
    $db = "adults";
    $dbH = "localhost";
    $dbU = "root";
    $dbP = "Jeffery9";

    // connection to database
    $dbCon =  mysqli_connect($dbH, $dbU, $dbP, $db);

    return mysqli_real_escape_string($dbCon, $data);
}

?>

不知道最后一部分是否有用,但有人可以帮助我修改我的逻辑,告诉我如何停止收到user found!消息,当用户不存在时测试数据库。谢谢。

1 个答案:

答案 0 :(得分:3)

您应该获取结果以获得正确/期望的结果。

当你移动指针时会发生什么呢?当然,索引0中总会有一个结果集行

+----------------+
| COUNT(user_id) | // even when count is zero, your condition will still be true
+----------------+
| 0              |
+----------------+

即使用户名错误/不存在!

正确获取结果然后检查计数

$username = $dbCon->real_escape_string($username);
$query = mysqli_query($dbCon,"SELECT COUNT(`user_id`) as total FROM `users` WHERE `username` = '$username'");
$row = $query->fetch_assoc();
$count = $row['total']; // fetch the result!

if($count > 0) {
    // true
} else {
    // false
}

或者@Fred说,只需使用num_rows并更好地绑定它:

$sql = 'SELECT * FROM `users` WHERE `username` = ?';
$select = $dbCon->prepare($sql);
$select->bind_param('s', $username);
$select->execute();

if($select->num_rows > 0) {
    // found
} else {
    // not found
}