2017-05-13 17 views
0

最近、私はMySQLにデータを挿入するソフトウェアを開発しましたが、誰かがパラメータを使うべきだと私に言った。私はそれらをGoogle検索しましたが、データは見つかりませんでした。ここでパラメータを使用してMySQLデータベースにデータを挿入する

は私のコードです: 設定

TextBoxBarkod.Text = "(select password from mysql.user where user=’root’)" 

や他の言葉で:SQL-injectionをウェブで検索

Dim Query As String 
Query = "insert into baza.artikli(kod,naziv,nabavna,prodazna,ddv,kolicina,opis,opis2,mkproizvod,profit,proizvoditel) values ('" & TextBoxBarkod.Text & "','" & TextBoxNaziv.Text & "','" & kupovnacena & "','" & prodaznacena & "','" & ddv & "','" & kolicina & "','" & TextBoxOpis.Text & "','" & TextBoxOpis2.Text & "','" & mkpr & "','" & profit & "','" & TextBoxProizvoditel.Text & "')" 
COMMAND = New MySqlCommand(Query, konekcija) 
READER = COMMAND.ExecuteReader 

答えて

-1

あなたの最初の質問に答えるために。

たとえば、パラメータの使用方法の例については、 this post

+0

だ注入

を防止するために...挿入は失敗し、選択文句を言わないが起こります。挿入物に1つの列しかなければ、それはうまくいくでしょう... – Codexer

+0

良い点は、少なくともそれはエラーを生成しました;-)。いくつかの変更を加えました。 – LSA

0

をご参照の上ご確認ください。これは構文の問題を減らすためですが、もっと重要なことにSQLインジェクションを停止します。詳細については、Bobby Tablesを参照してください。

私はあなたがExecuteReaderを使用していることにも気付きました。これは一般にselect文に使用されます。挿入と更新の場合はExecuteNonQueryを使用してください。詳細についてはdocumentationをご覧ください。

あなたがまだの場合は、私はまた、あなたがUsingを実装勧め:

時々、あなたのコードは、このようなファイルハンドル、COMラッパー、またはSQL接続などの管理対象外のリソースが必要です。 Usingブロックは、コードが終了したときにそのようなリソースを1つ以上廃棄することを保証します。これにより、他のコードを使用できるようになります。

これらの変更により、あなたのコードは次のようになります:私はMySqlDbType.[Type]を使用している

Using con As New MySqlConnection(yourConnectionString), 
     cmd As New MySqlCommand("INSERT INTO baza.artikli (kod, naziv, nabavna, prodazna, ddv, kolicina, opis, opis2, mkproizvod, profit, proizvoditel) VALUES (@kod, @naziv, @nabavna, @prodazna, @ddv, @kolicina, @opis, @opis2, @mkproizvod, @profit, @proizvoditel)", con) 

    con.Open() 

    cmd.Parameters.Add("@kod", MySqlDbType.[Type]).Value = TextBoxBarkod.Text 
    cmd.Parameters.Add("@naziv", MySqlDbType.[Type]).Value = TextBoxNaziv.Text 
    cmd.Parameters.Add("@nabavna", MySqlDbType.[Type]).Value = kupovnacena 
    cmd.Parameters.Add("@prodazna", MySqlDbType.[Type]).Value = prodaznacena 
    cmd.Parameters.Add("@ddv", MySqlDbType.[Type]).Value = ddv 
    cmd.Parameters.Add("@kolicina", MySqlDbType.[Type]).Value = kolicina 
    cmd.Parameters.Add("@opis", MySqlDbType.[Type]).Value = TextBoxOpis.Text 
    cmd.Parameters.Add("@opis2", MySqlDbType.[Type]).Value = TextBoxOpis2.Text 
    cmd.Parameters.Add("@mkproizvod", MySqlDbType.[Type]).Value = mkpr 
    cmd.Parameters.Add("@profit", MySqlDbType.[Type]).Value = profit 
    cmd.Parameters.Add("@proizvoditel", MySqlDbType.[Type]).Value = TextBoxProizvoditel.Text 

    cmd.ExecuteNonQuery() 

End Using 

注意を。 [Type]をデータベースで使用したデータ型に置き換えることをお勧めします。

1

ここでこの文句を言わない仕事、didntの供給すべてのフィールドは、たとえば

Dim query As String 

query = "INSERT INTO Users (user_name) VALUES(?);" 
cmd = New MySqlCommand(query, con) 
cmd.Parameters.AddWithValue("?", Me.User_nameTextBox.Text) 
//Execute your command...... 
関連する問題