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