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

时间:2013-05-28 13:54:19

标签: php mysql mysqli fetch

我是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.";
    }
}

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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

答案 2 :(得分: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();
}

safeMysql它将是一行(包括错误处理)

function get_user_id($email) {
    return $this->conn->getOne("SELECT id from users where email=?s",$email);
}