准备好的声明


Prepared statements?

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

绑定到$id,但返回 return $result->fetch() 的结果(布尔值)。

而是做

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

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

不能将bind_resultSELECT *一起使用。 您需要在SELECT中指定字段:

SELECT name, username

并在bind_result中指定每个变量。

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

(请注意,$result->fetch()只是填充bind_result中的变量,它不返回数据,而是返回布尔值。

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");
        }
    }
}

或者使用 get_result() 获取整行:

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");
        }
    }
}

这是应该这样做的。

<?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();
    }
}
?>

尝试更改

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

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

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