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