Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当用户名不在数据库中时,mysqli_data_seek函数返回用户名结果_Php_Mysql_Mysqli - Fatal编程技术网

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

Php 当用户名不在数据库中时,mysqli_data_seek函数返回用户名结果,php,mysql,mysqli,Php,Mysql,Mysqli,我有一个函数,在这个函数中,如果我的数据库中有一个命名用户,我会在屏幕上显示一条字符串值的消息,这只是说我的函数可以工作 但是,当我将名称更改为数据库中不存在的名称时,仍然会得到一个字符串输出,表明函数可以工作。因此,我试图找出我的逻辑在查询中的混乱之处。以下是我所拥有的: Users.php文件: <?php function user_exists($username) { $db = "adults"; $dbH = "localhost"; $dbU =

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

但是,当我将名称更改为数据库中不存在的名称时,仍然会得到一个字符串输出,表明函数可以工作。因此,我试图找出我的逻辑在查询中的混乱之处。以下是我所拥有的:

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

?>
<?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?';
    }
}
?>
<?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);
}

?>

我不知道最后一部分是否有用,但有人能帮我修正一下我的逻辑,如何停止找到
用户消息,当用户在我的测试数据库中不存在时。谢谢。

您应该获取结果以获得正确/所需的结果

只需移动指针,当然索引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
}

您可以将大量代码简化为只使用
mysqli_num_rows()
。我在此要指出的另一点是,将SQL分离为自己的变量也会很有帮助(因此您可以回显您将要执行的语句(甚至将其记录到error_log中)$sql=“选择计数…其中
username
=”$username”;“绑起来好多了:”-好多了;)这一切都是关于“安全精简”;)又短又结实。啊,也有。我知道你的意思;有一次,我在6个月后得到了一个被接受的答案(信不信由你),我同时感到困惑和高兴。lol
又一个幸福的结局
-@designer很高兴它成功了;)不客气。