迁移到预准备语句

时间:2014-01-24 19:37:21

标签: php mysql prepared-statement statements

基本上我将我的类文件中的所有语句转换为预处理语句。阅读完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();
  }
   }

3 个答案:

答案 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();

  }
 }