Mysqli代码获取一个结果并返回它

问题描述 投票:0回答:3

我是php新手。我有一个登录网站,用户可以使用他们的电子邮件登录。每个都分配有一个自动递增的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.";
    }
}

编辑:我现在收到的错误消息是:Fatal error: Call to a member function fetch_row() on a non-object

更新:这是有效的,谢谢RikkusRukkus:

    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()){
            $stmt->bind_result($user_id);
            $stmt->fetch();
            return $user_id;
        } else return "no ID returned.";
    }
}
php mysql mysqli fetch
3个回答
0
投票

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

您正在尝试在该布尔值上调用函数fetch_row(),该函数将不起作用。

如果使用准备好的语句,则应使用bind_result(),然后使用fetch()上的$stmt函数。

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


0
投票

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


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();
}
© www.soinside.com 2019 - 2024. All rights reserved.