Php 未捕获错误:对字符串调用成员函数fetch()

Php 未捕获错误:对字符串调用成员函数fetch(),php,api,postman,Php,Api,Postman,我正在尝试使用api调用更新数据库行,但由于某些原因,出现了以下错误: 未捕获错误:对字符串调用成员函数fetch() 我不确定字符串上的函数是什么意思,因为我将其应用于mysqli_stmt对象 这是put文件的外观: if (isset($authlvl)) { if (ctype_space($authlvl) == false && $authlvl >= 3) { if (isset($id) && ctype_sp

我正在尝试使用api调用更新数据库行,但由于某些原因,出现了以下错误:

未捕获错误:对字符串调用成员函数fetch()

我不确定字符串上的函数是什么意思,因为我将其应用于mysqli_stmt对象

这是put文件的外观:

    if (isset($authlvl)) {
    if (ctype_space($authlvl) == false && $authlvl >= 3) {
        if (isset($id) && ctype_space($id) == false) {
            if (isset($id) && ctype_space($id) == false && $id !== null) {
                $rule = $id;
                $request = 'id';
            } else if (isset($username) && ctype_space($username) == false && $username !== null) {
                $rule = $username;
                $request = 'username';
            } else if (isset($email) && ctype_space($email) == false && $email !== null) {
                $rule = $email;
                $request = 'email';
            } else if (isset($password) && ctype_space($password) == false && $password !== null) {
                $rule = $password;
                $request = 'password';
            } else if (isset($image) && ctype_space($image) == false && $image !== null) {
                $rule = $image;
                $request = 'image';
            } else {
                $request = "1";
                $rule = "2";
            }

            $post = new Post($db);
            $result = $post->post($request, $rule);
            $result->bind_result($previd, $prevusername, $prevemail, $prevpassword, $previmage, $prevauthlvl);
            $result->store_result();
            $num = $result->num_rows();

            if ($num > 0) {
                while ($result->fetch()) {
                    $put = new Put($db);
                    $result = $put->update(
                        isset($username) ? preg_replace('/\s+/', '', $username) : null,
                        isset($email) ? preg_replace('/\s+/', '', $email) : null,
                        isset($password) ? preg_replace('/\s+/', '', $password) : null,
                        isset($image) ? preg_replace('/\s+/', '', $image) : null,
                        isset($authlvl) ? preg_replace('/\s+/', '', $authlvl) : null,
                        $previd,
                        $prevusername,
                        $prevemail,
                        $prevpassword,
                        $previmage,
                        $prevauthlvl
                    );
                    echo $result;
                }
            } else {
                echo "Couldn't update row. Reason: 404 Not Found";
            }
        } else {
            echo "A valid id is required!";
        }
    } else {
        echo "You are not authorized to peform this request!";
    }
} else {
    echo "You are not authorized to peform this request!";
}
$username、$email等。。。由一个巨大的if语句混乱计算,我现在不包括它,因为它有很多行在使用中,但这里是它的一小部分:

   $content = file_get_contents('php://input');
     if (strpos($content, "email") !== false) {
                $email = substr($content, (strpos($content, "email")) + 10, ((strpos($content, "-", strpos($content, "email"))) - strpos($content, "email")) - 12);
  }
以下是post文件,它执行post请求:

class Post
{

我正在和邮递员一起测试api

我已经尝试过的:

  • 将结果存储在post文件中
  • 将$stmt重新定义为$stmt->execute(),这给了我一个错误的布尔错误
  • 在PDO中转换部件(后来发现无法将OOP与PDO混合使用)
  • put文件中的硬编码变量,也会失败
  • 如果有人有解决方案,请告诉我:)

    您正在循环中重新分配
    $result

    所以它执行一次,然后产生上面的错误消息。

    太简单了!谢谢
    private $conn;
    
    public $id;
    public $username;
    public $email;
    public $password;
    public $image;
    public $authlvl;
    
    public function __construct($db)
    {
        $this->conn = $db;
    }
    
    public function post($request, $rule)
    {
        $format = "s";
    
        if ($request == "id") {
            $query = "SELECT * FROM users WHERE id=?";
            $format = "i";
        } else if ($request == "username") {
            $query = "SELECT * FROM users WHERE username=?";
        } else if ($request == "email") {
            $query = "SELECT * FROM users WHERE email=?";
        } else if ($request == "password") {
            $query = "SELECT * FROM users WHERE password=?";
        } else if ($request == "image") {
            $query = "SELECT * FROM users WHERE image=?";
        } else {
            $query = "SELECT * FROM users";
        }
    
        if ($stmt = $this->conn->prepare($query)) {
            $stmt->bind_param("" . $format . "", $rule);
            $stmt->execute();
            return $stmt;
        } else {
            echo "invalid string";
        }
      }
    }
    
    while ($result->fetch()) {
        $put = new Put($db);
        // Here you reassign $result which now is a string.
        $result = $put->update(
            isset($username) ? preg_replace('/\s+/', '', $username) : null,
            isset($email) ? preg_replace('/\s+/', '', $email) : null,
            isset($password) ? preg_replace('/\s+/', '', $password) : null,
            isset($image) ? preg_replace('/\s+/', '', $image) : null,
            isset($authlvl) ? preg_replace('/\s+/', '', $authlvl) : null,
            $previd,
            $prevusername,
            $prevemail,
            $prevpassword,
            $previmage,
            $prevauthlvl
        );
        echo $result;
    }