Проблема в том, что вы помещаете «ноль» между одинарными кавычками!
`Date`='$request->Info->Date'
Решение: Используйте параметры связывания в подготовленном вами выражении.https://www.php.net/manual/en/pdo.prepare.php
$pdo = new PDO($dsn, $user, $pass, $options);
$sth = $pdo->prepare("UPDATE `users` SET
`Username`=:username, `Date`=:date
WHERE `id` = :id LIMIT 1");
$sth->bindParam(':username', $request->Info->Name, PDO::PARAM_STR);
$sth->bindParam(':date', $request->Info->Date);
$sth->bindParam(':id', $id);
$sth->execute();
Вы должны создать некоторый класс проверки, в котором он будет возвращать правильные (очищенные) значения из запроса, который вы собираетесь использовать в запросе.
Рассмотрите возможность создания некоторыхкласс / логика типа
final class InfoRequest
{
/** @var array */
private $info;
public function __construct($request)
{
$this->info = $request->Info;
}
public function date(): ?string
{
$date = $this->info['Date'];
if (!$this->isValidDate($date)) {
throw NotValidDateException();
}
if (!$date) {
return null;
}
$dateTime = new \DateTime($this->info['Date']);
return $dateTime->format('Y-m-d');
}
private function isValidDate($date): bool
{
return true; // TODO: Not implemented yet
}
public function name(): string
{
$name = $this->info['Name'];
if (!$this->isValidName($name)) {
throw NotValidNameException();
}
return $name;
}
private function isValidName($name): bool
{
return true; // TODO: Not implemented yet
}
}
Использование:
$info = new InfoRequest($request);
$sth->bindParam(':username', $info->name(), PDO::PARAM_STR);
Кроме того, вы никогда не должны передавать прямой ввод из запроса в необработанный запрос к БД.