MySQLi中的进程激活函数?

时间:2015-05-08 00:08:24

标签: php html mysqli

尝试在PHP和MySQLi中启动一个函数,如果用户被激活(1)则返回TRUE,或者FALSE是用户未被激活(0)。

我已经测试了这些代码并且没有运气,导致MySQLi错误。请记住,我是MySQLi的新手。

function get_activated($mysqli, $userid) {

    $row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array();
    if($row){
        $activated = TRUE;
        return $activated;
    }
}

function get_activated($mysqli) {

    $row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array();
    if($row){
        $activated = TRUE;
        return $activated;
    }
}

function get_activated($mysqli, $userid) {
    if(isset($_SESSION['userid'])) {
         $userid = $_SESSION['userid'];
    $row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array();
    if($row){
        $activated = TRUE;
        return $activated;
    }
    }
}

function get_activated($mysqli) {
    if(isset($_SESSION['userid'])) {
         $userid = $_SESSION['userid'];
    $row = $mysqli->query("SELECT activated FROM users WHERE userid = '{$userid}'")->fetch_array();
    return $row["activated"];
    }
}

我正在调用这样的函数:

get_activated($userid);
                echo $activated;
                exit();

get_activated();
            echo $row['activated'];
            exit();

如果有人能指出我在正确的轨道上,我会非常感激,谢谢!

错误示例:

get_activated()缺少参数2 在非对象上调用成员函数query() 只应通过引用传递变量 缺少get_activated()

的参数1

2 个答案:

答案 0 :(得分:1)

我认为你正在寻找类似的东西:

function get_activated($mysqli, $userid) {
    $row = $mysqli->query("SELECT * FROM users WHERE userid = '$userid' AND activated = '1'")->fetch_array();
    if(!empty($row)){
        return true;
    }
    return false;
}

fetch_array()方法是MySQLi如果没有找到任何行就会返回null,我只是喜欢使用空,如果你有扩展的MySQLi并且以某种方式改变了功能 - 我在意外之前就已经这样做了。

当你再调用这个函数时,你应该使用 -

$activated = get_activate($mysqli,1);
var_dump($activated);

另一方面,我会一直使用准备好的陈述,但这不是针对这个问题的。

答案 1 :(得分:1)

因此,让我们逐一采取这些

function get_activated($mysqli, $userid) {

    $row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array();
    if($row){
        $activated = TRUE;
        return $activated;
    }
}

因此注入mysqli类的+1,但您只关注查询是否成功。请记住,查询可以成功并返回0行。如果查询成功,您还只能return。您应该在成功时返回true,而false则不会成功。

功能#2令人困惑,因为它省略了$userid并遇到了同样的问题。

function get_activated($mysqli, $userid) {
    if(isset($_SESSION['userid'])) {
         $userid = $_SESSION['userid'];
    $row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array();
    if($row){
        $activated = TRUE;
        return $activated;
    }
    }
}

所以现在我们有$_SESSION个值,但仍然传递$userid作为参数(这令人困惑)。然后我们查看query是否返回任何值。这样做会更好,但将query链接到fetch_*是一种不好的形式,因为如果查询失败,则会出现致命错误。

function get_activated($mysqli) {
    if(isset($_SESSION['userid'])) {
         $userid = $_SESSION['userid'];
    $row = $mysqli->query("SELECT activated FROM users WHERE userid = '{$userid}'")->fetch_array();
    return $row["activated"];
    }
}

同样的问题$userid为#3和链接相同的问题,但我们更接近,因为我们至少会返回一个值。但是,同样,如果查询返回0行,它也不会考虑会发生什么。

让我们写一个现在有效的完整功能

function get_activated($mysqli, $userid) {
     $uid = $mysqli->real_escape_string($userid);
     $result = $mysqli->query("SELECT * FROM users WHERE userid = " . $uid . " AND activated = '1'");
     $data = $result->fetch_assoc();
     return ($data) ? true : false;
}

所以,首先我们清理$userid。然后我们对它进行查询。然后,我们寻找一个返回的行,如果我们做了或者没有,我们返回一个布尔值。现在我们可以像这样使用它

if(get_activated($mysqli, $userid)) {
    echo 'Activated';
} else {
    echo 'Not activated';
}