未定义的属性:stdClass :: $ id错误

时间:2018-05-21 22:32:08

标签: php mysql laravel

每当我上传新图片时,我都试图将图像名和图像路径记录添加到mysql数据库中,但是,我收到以下错误:

undefined property: stdClass::$id in C:\Service\ChallengeService.php on line 184
undefined property: stdClass::$id in C:\Service\ChallengeService.php on line 188

我复制了一个功能,它也以相同的方式将图像保存到类似的字段中,我几乎只是重用了这个功能,所以我不知道它为什么会给我一个错误。

这是更新我的数据库的功能:

public function updateChallengeImage($challenge) {
        try {
            $query = "update challenges
                            set image = :image
                                ,image_file_name = :image_file_name
                      where      
                        id = :id";
            $values = array(
                ":image" => $challenge->image,
                ":image_file_name" => $challenge->image_file_name,
                ":id" => $challenge->id
            );
            $stmt = $this->db->prepare($query);
            $stmt->execute($values);
            return $challenge->id;
        } catch (PDOException $e) {
            $this->logger->error("PDO: ".$e->getMessage(), ["class"=>get_class($this),"method"=>__METHOD__]);
            return -1;
        }
    }

为什么没有传递$ id变量?我的日志中也出现了这个警告:

PHP:WARNING Creating default object from empty value in `C:\\classes\napify\Controller\ChallengesController.php on line 106`

但是我的控制器功能看起来很好,它应该从数据库中加载ID:

public function saveChallengeImage($request, $response, $args) {
        $files = $request->getUploadedFiles();
        $data = $request->getParsedBody();
        $valid = true;
        if (!(Utils::isImage($files['image']->file))) {
            $this->flash->addMessage('message', 'Las imagenes no deben superar los 700kb ');
            $this->flash->addMessage('error', 1);
            $valid = false;
        }
        if ($valid) {
            $challenge = $this->ChallengeService->getChallenge(filter_var($data['challenge_id'], FILTER_SANITIZE_STRING));
            $challenge->image_file_name = $files['image']->getClientFileName();
            $challenge->image = $this->saveFile($files['image']);
            $this->ChallengeService->updateChallengeImage($challenge);
            $this->flash->addMessage('message', 'Se guardó la imagen.');
        }

在控制器上调用的getChallenge函数。

 public function getChallenge($id) {
        try {
            $query = "select
                         c.id
                        ,c.title
                        ,c.description
                        ,c.active
                        ,c.start_date
                        ,c.end_date
                        ,c.image
                        ,c.image_file_name
                        ,c.color1
                        ,c.color2
                        ,c.color3
                        ,c.color4
                    from 
                        challenges c
                    where
                        id = :id";
            $values = array(
                ":id" => $id
            );
            $stmt = $this->db->prepare($query);
            $stmt->execute($values);
            $stmt->setFetchMode(PDO::FETCH_CLASS, 'napify\Model\Challenge');
            return $stmt->fetch();
        } catch (PDOException $e) {
            $this->logger->error("PDO: ".$e->getMessage(), ["class"=>get_class($this),"method"=>__METHOD__]);
            return null;
        }
    }

我不确定为什么它无法从数据库加载ID或无法使用imagefile和imagename值更新数据库。任何帮助我指出正确的方向或可以告诉我在哪里犯错误的人都表示赞赏。

0 个答案:

没有答案