PHP代码mysql查询不起作用

时间:2016-01-11 19:53:06

标签: php mysql sql

我创建了一个mysql查询来检查用户是否被禁止,如果他是系统,则给他返回false。但是它不会得到这些信息。

    public static function checkban($username)
{

    if(LOGINCHECKBAN == false)
    {
        $vusername = engine::securyt($username);
        $getIdBYname = "SELECT id FROM players WHERE username='".$vusername."' LIMIT 1";
        $getNOW = mysql_query($getIdBYname);
        $IDbyNAME = mysql_free_result($getIdBYname);
        $queryforban = mysql_query("SELECT * FROM bans WHERE data = '".$IDbyNAME."' LIMIT 1");
        $query = mysql_num_rows($queryforban);
        if($query == 0) {
            return true;
        } else {
            return false;
        } 
    }
}

注意:engine :: securyt($ username)是在尝试登录时获取用户名的表单类型。

我的代码有什么问题? 编辑:我相信“mysql_free_result”可能是问题,但我不确定我需要替换它。

1 个答案:

答案 0 :(得分:1)

mysql_free_result()释放一个mysql结果集。它实际上并不从结果中检索数据。

您需要以下内容:

$getIdBYname = "SELECT id FROM players WHERE username='".$vusername."' LIMIT 1";
$result = mysql_query($getIdBYname);
$row = mysql_fetch_assoc($result);
if($row) { //a user was found
    //$row['id'] is the found user
    $result = mysql_query("SELECT COUNT(*) cnt FROM bans WHERE data = '". $row['id'] ."' LIMIT 1");
    $row = mysql_fetch_assoc($result);
    return ($row && $row['cnt'] == 0);
} else {
    // no user; return something appropriate
}

但是,如果您只需确定是否禁止某个特定用户名(并且实际上并未获得其用户ID),则可以使用一个查询直接在数据库中执行此操作:

SELECT COUNT(*)
    FROM players p
    INNER JOIN bans b ON b.data = p.id
    WHERE p.username = $username;

警告:请注意,强烈建议不要使用mysql_ *函数来处理新代码(因为PHP 7中已删除了mysql_ *),并且在查询字符串中直接包含变量是一个非常重要的安全漏洞。您应该考虑使用mysqliPDO准备好的语句/参数化查询。