【问题标题】:sql add user input to existing valuesql将用户输入添加到现有值
【发布时间】:2017-12-05 17:03:06
【问题描述】:

我使用的是 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。

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

【问题讨论】:

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

标签: ruby postgresql sinatra psql


【解决方案1】:

正如 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 语句。

【讨论】:

    猜你喜欢
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2016-01-31
    • 2016-07-06
    相关资源
    最近更新 更多