Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取一个结果并返回它的Mysqli代码_Php_Mysql_Mysqli_Fetch - Fatal编程技术网

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

Php 获取一个结果并返回它的Mysqli代码,php,mysql,mysqli,fetch,Php,Mysql,Mysqli,Fetch,我是php新手。我有一个登录站点,用户通过电子邮件登录。每个用户都被分配了一个自动递增的用户id。我想从数据库中获取相关的用户id,并将其存储在会话中,以便当他们提交内容时,可以从会话中获取他们的用户id,并与内容一起提交。但是,我的“获取用户id”功能无法从他们的电子邮件地址查找用户id。我尝试过使用fetch_行、get_result、bind_result中的各种mysqli命令,但是没有任何东西会返回用户id function get_user_id($email) {

我是php新手。我有一个登录站点,用户通过电子邮件登录。每个用户都被分配了一个自动递增的用户id。我想从数据库中获取相关的用户id,并将其存储在会话中,以便当他们提交内容时,可以从会话中获取他们的用户id,并与内容一起提交。但是,我的“获取用户id”功能无法从他们的电子邮件地址查找用户id。我尝试过使用fetch_行、get_result、bind_result中的各种mysqli命令,但是没有任何东西会返回用户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()

更新:这是成功的-谢谢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.";
    }
}

您可以编写自己的fetch result方法,这样就可以使用参数返回单列或整行。

变量
$result
将包含一个
布尔值
——一个TRUE或FALSE

您试图对该布尔值调用函数
fetch\u row()
,但该函数无效

如果您使用的是预先准备好的语句,那么应该使用
bind_result()
,然后使用
$stmt
上的
fetch()
函数

更改
$row=$result->fetch_row()
$stmt->fetch()
并调用
bind_result()
,而不是使用变量
$row
,如下例所述:

使用该代码将缩短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();
}

想必你已经检查了数据库,以确保你使用的电子邮件存在?是的!电子邮件地址存在。get_user_id步骤发生在他们使用电子邮件地址(或创建帐户)登录之后,因此此时已验证电子邮件。如果准备失败,则根据该代码判断不会返回任何内容。您可能希望输出错误消息,
$mysqli->error
-对
execute()
失败时返回的no-ID执行相同操作。
function get_user_id($email) {
    $query = "SELECT id from users where email=?";
    $stmt = $this->conn->prepare($query);
    $stmt->execute(array($email));
    return $stmt->fetchColumn();
}