0

VBのアプリケーションにパスワード変更モジュールを実装しようとしています。更新クエリにいくつかの問題があります

Private Sub cmdOK_Click()
Query = "Select * From Users Where LoginID='" & txtLoginID & "' and Password = '" & txtCuPassword & "'"
 Set reSet = myCon.Execute(Query)

If (Not reSet.BOF) And (Not reSet.EOF) Then
    Query1 = "UPDATE Users SET Password ='" & txtNewPassword & "' WHERE LoginID='" & txtLoginID & "'"
    Set reSet = myCon.Execute(Query1)

実行すると、UPDATEクエリで構文エラーとしてエラーがスローされます。

4

1 に答える 1

2

したがって、コードの txtNewPassword フィールドに一重引用符がある場合、クエリは次のようになります。

Query = "UPDATE Users SET Password ='mypass'word' WHERE LoginID='123'"

もちろん、これは構文エラーです。

一重引用符を一重引用符のペアに置き換えることができます

Query = "UPDATE Users SET [Password] ='" & Replace(txtNewPassword, "'", "''") & "' WHERE .... 

ただし、このコードは SQL インジェクションに対して広く開かれていることに注意してください。VB6でそれを行うのが本当に簡単でない場合も、パラメータ化されたクエリを使用する必要があります. また、コメントでHansUpが指摘したように、予約語Passwordを角括弧で囲む必要があります

SQL 文字列に値を入れる代わりにパラメーターを使用する必要があるのはなぜですか

于 2013-02-23T10:36:57.350 に答える