Запрос на обновление PDO в скобках

Я хочу выполнить такой запрос:

UPDATE users SET online_time = (online_time + 50) WHERE ID = 1

У меня проблема, потому что online_time не обновляется, его заменяют на 0.
В mysqli все было ок.
Это мой код для функции обновления в классе базы данных (это из Интернета, а не моя работа):

public function update($table, $data, $where)
{
ksort($data);

$fieldDetails = null;
foreach($data as $key => $value){
$fieldDetails .= "$key=:$key, ";
}
$fieldDetails = rtrim($fieldDetails, ', ');

$sth = $this->prepare("UPDATE $table SET $fieldDetails WHERE $where");

foreach ($data as $key => $value){
$sth->bindValue(":$key", $value);
}
$sth->execute();
}

и код, который я пытаюсь запустить:

$set = ['online_time' => "(online_time + $t)"];
$where = 'ID = '. $id;
$this->db->update('users', $set, $where);

Возможно, что-то не так с функцией обновления, но я не знаю, что: /

0

Решение

Первая и главная проблема с вашей функцией обновления заключается в том, что она склонен к внедрению SQL.

И да, он не подходит для обновления со сложными выражениями, как это.

Так что для этого конкретного запроса просто избегайте этой функции и выполняйте только необработанный подготовленный оператор

$sth = $db->prepare("UPDATE users SET online_time = online_time + ? WHERE ID = ?");
$sth->execute([$t, $id]);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector