无法检查数据库PHP中是否存在用户

时间:2017-05-23 17:48:21

标签: php sql

我有一种情况,我必须检查数据库中是否存在用户,我试试这个:

$username = htmlspecialchars($_POST['userName']);
/* Check if username is free*/
if(!isset($error_message)) {
if(!isset($_POST["userName"])) {
$error_message = " All Fields are required";
} else {
    $db_handle = new mysqli("localhost", "root", "pass", "database");
    $query = 'SELECT * FROM naudotojai WHERE username = "$username"';
    $result = $db_handle->query($query);
    if($result->num_rows == 0) {
        $error_message = "Do not exist";
}
}
}

但它没有用。即使我输入数据库中存在的有效用户名,它也总是返回0行。

mysqli_result Object ( [current_field] => 0 [field_count] => 7 [lengths] => [num_rows] => 0 [type] => 0 ) 

然后我有第二个脚本,在那里我检查用户名是否是免费的,这很好用:

 $username = htmlspecialchars($_POST['userName']);
    /* Check ir username is free*/
    if(!isset($error_message)) {
    if(!isset($_POST["userName"])) {
    $error_message = " All Fields are required";
    } else {
        $db_handle = new mysqli("localhost", "root", "pass", "database");
        $query = 'SELECT * FROM naudotojai where username = "$username"';
        $result = $db_handle->query($query);
        if(!empty($result)) {
            $error_message = "Exists";
    }
    }
    }
你可以帮我解决这个问题吗?我不能自己搞清楚。

编辑:当我手动输入用户名时,它工作正常。所以问题在于查询中的变量。但是我没有得到它。为什么它适用于一个查询但不适用于另一个...

$query = 'SELECT * FROM naudotojai WHERE username = admin';

2 个答案:

答案 0 :(得分:0)

您使用单引号字符串来构建查询,因此不会替换字符串$ username。

尝试使用

"SELECT * FROM naudotojai where username = '$username'"

但更好的方法是使用预准备语句来避免SQL注入。

答案 1 :(得分:0)

您可以将PDO与PHP一起使用。

}else{
    $dbh = new PDO('mysql:host=localhost;dbname=database', "root", "pass");
    $sth = $dbh->prepare("SELECT * FROM naudotojai where username = :username");
    $sth->execute(":username" => $username);
    $result = $sth->fetchAll(PDO::FETCH_ASSOC);

    if($result){
       // do something
   }

}