Eu percebi que quando eu quero usar uma string eu coloca entre aspas simples,como abaixo... porque na hora de usar o "id" eu usei ele entrei aspas se o "id" não é uma string?
$query = "update produtos set nome = '{$nome}', preco = {$preco}, descricao = '{$descricao}',
categoria_id= {$categoria_id}, usado = {$usado} where id = '{$id}'";