基本上我将我的类文件中的所有语句转换为预处理语句。阅读完php.net手册后,我仍然无法看到我的错误在哪里或是什么。
在这个特定的功能中,我通过用户ID获取用户的个人资料。
任何帮助人员?
我能够回答我自己的问题。使用SELECT *
对于面向对象的预准备语句不起作用。
而是,选择所需表中的所有字段,然后相应地绑定它们。
此特定功能通过其ID获取用户的所有详细信息。
享受。
public function getProfile($id){
if($result = $this->link->prepare("SELECT id,first,last,full_name,email,photo FROM dl_users WHERE id=?")){
$result->bind_param('i',$id);
$result->execute();
$result->store_result();
$result->bind_result($id,$first,$last,$full_name,$email,$bio,$hometown,$position,$skills,$photo);
if($result->num_rows == 1){
$user = array();
$result->fetch();
$user['id'] = $id;
$user['first'] = $first;
$user['last'] = $last;
$user['full_name'] = $full_name;
$user['email'] = $email;
$user['photo'] = $photo;
return $user;
}
$result->close();
}
}
答案 0 :(得分:1)
MySQLi的预处理语句使用变量引用。 $result->fetch()
没有返回字段,它返回一个布尔值。
你能做的是:
public function getProfile($id){
if($result = $this->link->prepare("SELECT * FROM users WHERE id =?")){
$result->bind_param("s", $id);
$result->execute();
$result = $stmt->get_result();
if($row = $result->fetch_assoc()){
return $row;
}else{
return array("error"=>"Profile-Not-Found");
}
$result->close();
}
}
注意:这需要安装mysqlnd。
答案 1 :(得分:1)
如果您的id字段是整数,则必须以这种方式绑定param:
$result->bind_param("i", $id);
此处有更多信息:http://www.php.net/manual/en/mysqli-stmt.bind-param.php
答案 2 :(得分:-1)
我能够回答我自己的问题。使用SELECT *
对于面向对象的预准备语句不起作用。
而是,选择所需表中的所有字段,然后相应地绑定它们。
此特定功能通过其ID获取用户的所有详细信息。
享受。
public function getProfile($id){
if($result = $this->link->prepare("SELECT id,first,last,full_name,email,photo FROM dl_users WHERE id=?")){
$result->bind_param('i',$id);
$result->execute();
$result->store_result();
$result->bind_result($id,$first,$last,$full_name,$email,$bio,$hometown,$position,$skills,$photo);
if($result->num_rows == 1){
$user = array();
$result->fetch();
$user['id'] = $id;
$user['first'] = $first;
$user['last'] = $last;
$user['full_name'] = $full_name;
$user['email'] = $email;
$user['photo'] = $photo;
return $user;
}
$result->close();
}
}