2017-07-02 3 views
0

私はpsqlデータベースを使用しています。残りはSinatraを使用するRubyです。 私のコントローラ、モデル、私の意見などがありますsql既存の値にユーザー入力を追加します

私は少し目録アプリケーションをやっていますが、現在私は在庫の新しい数量でデータベースを更新することができます。再生回数

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 =数量+#{params [:quanity]} WHERE ...'?これはおそらく追加の検証を必要とするでしょうが、コアはそれです。 – mudasobwa

答えて

0

コメントにmudasobwaが記載されているので、数量値をSQL文に挿入することができます。フォーム(または他の形式のユーザー入力)から値を読み取っている場合、文字列補間によって直接値を挿入するのではなく、SQLステートメントでパラメーターを使用することをお勧めします。これは、無効な文字をエスケープすることによって、いくつかの形態のSQLインジェクションを防ぐのに役立ちます。これは、それをそれぞれ$1$2プレースホルダに数量とID値を挿入しますが、

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

:データベースへの接続に直接PG宝石を使用している場合

、あなたのようなものを使用することができます値がSQLステートメントを破損したり、悪意を持って変更したりしないようにします。

+0

ありがとう!それは魅力のように働いた! – finnporter

関連する問題