带括号的PDO更新查询

时间:2017-03-22 13:37:33

标签: php pdo brackets

我想执行这样的查询:

SparseTensor(indices=[[0, 0, 0], [0, 1, 2]], [1,1,2], values=[1, 2,3], dense_shape=[3, 4,2])

  [[1, 0, 0, 0]
   [0, 0, 2, 0]
   [0, 0, 0, 0],

   [0, 0, 0, 0]
   [0, 0, 3, 0]
   [0, 0, 0, 0]]

我遇到问题,因为online_time没有更新,它被0替换。 在mysqli一切都很好。 这是我在数据库类中更新函数的代码(它来自互联网,而不是我的工作):

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

我试图运行的代码:

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();
}

更新功能可能有问题,但我不知道:/

1 个答案:

答案 0 :(得分:0)

更新功能的首要问题是prone to SQL injection

是的,它不适合用这样的复杂表达式进行更新。

因此,对于此特定查询,只需避免使用此函数并仅运行原始预准备语句

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