Я пытаюсь добавить записи imagename и imagepath в базу данных 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`
Однако моя функция контроллера выглядит нормально, она должна загружать идентификатор из базы данных:
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;
}
}
Я не уверен, почему он не может загрузить идентификатор из базы данных или обновить базу данных значениями imagefile и imagename.Любая помощь, которая указывает мне правильное направление или которая может сказать мне, где я делаю ошибки, ценится.