0

基本上,我将类文件中的所有语句都转换为准备好的语句。阅读 php.net 手册后,我仍然看不到我的错误在哪里或是什么。

在这个特定的功能中,我通过用户 ID 获取用户的个人资料。

有帮助的小伙伴吗?

    public function getProfile($id){
    if($result = $this->link->prepare("SELECT * FROM users WHERE id =?")){
        $result->bind_param("s", $id);
        $result->execute();
        $result->bind_result($id);
        if($result->num_rows !=0){
            return $result->fetch();
        }else{
            return array("error"=>"Profile-Not-Found");
        }
        $result->close();
    }
}
4

4 回答 4

0

You cannot use bind_result with SELECT *. You need to either specify the fields in the SELECT:

SELECT name, username

And specify each variable in the bind_result.

$result->bind_result($name, $username);

(Note that $result->fetch() just populates the variables from bind_result, it doesn't return the data, it returns a boolean.)

public function getProfile($id){
    if($result = $this->link->prepare("SELECT name,username FROM users WHERE id =?")){
        $result->bind_param("s", $id);
        $result->execute();
        $result->bind_result($name, $username);
        if($result->num_rows !=0 && $result->fetch()){
            return array('name' => $name, 'username' => $username);
        }else{
            return array("error"=>"Profile-Not-Found");
        }
    }
}

Or use get_result() to get the entire row:

public function getProfile($id){
    if($result = $this->link->prepare("SELECT * FROM users WHERE id =?")){
        $result->bind_param("s", $id);
        $result->execute();
        if($result->num_rows !=0){
            $row = $result->get_result();
            return $row->fetch_assoc();
        }else{
            return array("error"=>"Profile-Not-Found");
        }
    }
}
于 2013-09-23T19:35:05.723 回答
0

您绑定到$id,但返回return $result->fetch()(a bool) 的结果。

宁可做

if($result->num_rows !=0){
        $result->fetch();
       return $id;
    }else{
        return array("error"=>"Profile-Not-Found");
    }

SELECT *此外,您可能希望列出感兴趣的字段并明确绑定它们,而不是执行 a 。

于 2013-09-23T19:28:13.510 回答
0

这就是应该这样做的方式。

<?php

public function getProfile($id){
    if($result = $this->link->prepare("SELECT * FROM users WHERE id =?")){
        $result->bind_param("s", $id);
        $result->execute();
        $result->store_result();

        if($result->num_rows !=0){
            $result1 = $result->get_result();
            return $result1->fetch_assoc();
        }else{
            return array("error"=>"Profile-Not-Found");
        }
        $result->free_result();
        $result->close();
    }
}
?>
于 2013-09-23T22:44:49.017 回答
-1

尝试改变

$result->bind_param("s", $id);

$result->bind_param("i", $id);

因为我会认为某物的 ID 将是一个整数(也许是您记录的唯一 ID?)

于 2016-10-06T09:15:36.740 回答