2017-07-02 147 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