sql将用户输入添加到现有值

时间:2017-07-02 07:27:40

标签: ruby postgresql sinatra psql

我正在使用psql数据库,其余的是使用Sinatra的Ruby。 我有我的控制器,我的模型,我的观点等。

我正在做一个小库存应用程序,目前我只能通过我的一个视图中的html表单用库存中的新数量更新数据库。

UPDATE products SET (name, quantity) = ('#{@name}', #{@quantity}) WHERE id = #{@id};

但是,我希望能够将订购/交付的金额输入到表格而不是库存中的新数量。

我知道我能做到

UPDATE product SET quantity = quantity + 200 WHERE...and so on.

但这不会从表格中获取200。

这是我第一次在这里提问,所以如果有任何遗漏请告诉我,我会为您提供更多信息。

1 个答案:

答案 0 :(得分:0)

正如评论中提到的mudasobwa,您可以在SQL语句中插入数量值。如果您正在从表单(或任何其他形式的用户输入)读取值,我建议在SQL语句中使用参数,而不是直接通过字符串插值插入值。这有助于通过转义无效字符来阻止某些形式的SQL注入。

如果您直接使用PG gem连接到数据库,则可以使用以下内容:

conn = PG.connect(connection_params)
conn.exec("UPDATE products SET quantity = quantity + $1 WHERE id = $2", 
          [params[:quantity], params[:id]])

这会将数量和ID值分别插入$1$2占位符,但也会确保这些值不会破坏或恶意修改SQL语句。