0

我有一个登录站点,用户可以在其中使用他们的电子邮件登录。每个都分配了一个自动递增的 user_id。我想从数据库中获取关联的 user_id 并将其存储在会话中,以便当他们提交内容时,可以从会话中获取他们的 user_id 并与内容一起提交。但是,我的“get_user_id”函数无法从他们的电子邮件地址中查找用户 ID。我已经尝试使用 fetch_row、get_result、bind_result 中的各种 mysqli 命令,但没有任何内容会返回 user_id。

    function get_user_id($email) {
    //$email = mysqli_real_escape_string($this->conn, $email);
    $query = "SELECT id from users where email=?";
    if ($stmt = $this->conn->prepare($query)){
        $stmt->bind_param('s',$email);
        if($result = $stmt->execute()){
            $row=$result->fetch_row();
            return $row['id'];
        } else return "no ID returned.";
    }
}
        
    

我现在收到的错误消息是:

致命错误:在非对象上调用成员函数 fetch_row()

4

3 回答 3

0

您可以编写自己的获取结果方法,以便可以使用参数返回单列或整行。

于 2013-05-28T13:57:48.753 回答
0

该变量$result将包含一个boolean- 一个 TRUE 或 FALSE。

您正在尝试fetch_row()在该布尔值上调用该函数,但这是行不通的。

如果你使用准备好的语句,你应该使用bind_result()然后fetch()函数 on $stmt

更改$row=$result->fetch_row();$stmt->fetch();,而不是使用变量$rowcall bind_result(),如此处示例中所述:http: //php.net/manual/en/mysqli-stmt.fetch.php

于 2013-05-28T14:02:01.547 回答
0
function get_user_id($email) {
    $query = "SELECT id from users where email=?";
    $stmt = $this->conn->prepare($query);
    $stmt->bind_param('s',$email);
    $stmt->execute();
    $stmt->bind_result($id);
    $stmt->fetch();
    return $id;
}

使用PDO,代码将缩短 2 倍

function get_user_id($email) {
    $query = "SELECT id from users where email=?";
    $stmt = $this->conn->prepare($query);
    $stmt->execute(array($email));
    return $stmt->fetchColumn();
}
于 2013-05-28T14:11:32.057 回答