mysql受影响的_rows返回1,但是实际的mysql没有更新

时间:2019-01-23 09:48:04

标签: php mysql

我具有此功能:

     public function update($id, $value)
    {
        $query = 'UPDATE ' . table .
                 ' SET ' . table . '.value = ?' .
                 ' WHERE ' . table . '.value = ?';

        $stmt = $this->connection->prepare($query);

        if (!$stmt || !$stmt->bind_param('ii', $id, $value)) {
            return false;
        }

        if (!$stmt->execute() || !$stmt->affected_rows) {
            return false;
        }

        return true;
}

问题是此函数返回true,受影响的行返回1,但这不会更新我的实际mysql表。如果我试图在mysql内进行查询,则可以使用。有人可以告诉我为什么吗?

2 个答案:

答案 0 :(得分:1)

这是正确的代码。

public function update($id, $value)
{
    $query = 'UPDATE table SET value =? WHERE id =?';

    $stmt = $this->mysqli->prepare($query);
    $stmt->bind_param('ii', $value,$id);
    $status = $stmt->execute();
    if ($stmt === false) 
    {
        trigger_error($this->mysqli->error, E_USER_ERROR);
        return;
    }
    else
    {
        return $stmt->affected_rows;
    }
}

答案 1 :(得分:1)

您可能忘记了更改$ id和$ value的顺序。因为现在有固定的UPDATE表SET table.value = $ id,而table.value = $ value。但是where子句正在查询需要更新的记录