2017-07-02 99 views
0

我正在使用psql数据库,其余的是使用Sinatra的Ruby。 我有我的控制器,我的模型,我的意见等sql将用户输入添加到现有值

我正在做一个小库存的应用程序,目前我只能更新数据库与库存的新数量通过我的一个HTML表单观点。

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

但是,我希望能够将已订购/交货的数量放入表单中,而不是库存上的新数量。

我知道我可以做

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

但不从形式走200。

这是我第一次在这里问一个问题,所以如果有什么缺失,请让我知道,我会为您提供更多的信息。

+1

'UPDATE product SET quantity = quantity +#{params [:quanity]} WHERE ...'?这可能需要额外的验证,但核心是这样。 – mudasobwa

回答

0

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

如果您是直接使用PG宝石连接到数据库,您可以使用类似:

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

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

+0

谢谢!它像一个魅力一样工作! – finnporter