나는 액세스를 위해 메모장 응용 프로그램을 만드는 중입니다. 나는 메모장을 수용하기위한 양식과 다양한 기능을위한 몇 개의 버튼을 만들었습니다. 메모장은 tblContents
이라는 테이블에 Memo
으로 저장됩니다. 이는 텍스트에서 255 자 이내로 제한되어 있기 때문입니다.SQL에 아포스트로피를 추가하는 더 좋은 방법은 무엇입니까? - Access VBA
SO에서 많은 양의 텍스트를 복사하여 아포스트로피 문제를 인식하게되었습니다. 내가 어포 스트로피를 추가 할 때 실행하기 위해 특정 구문 (이 시점에서 기억이 안되는)이 될 필요가있는 SQL 문을 실행하면 테이블에 텍스트를 저장할 때를 알 수 있습니다.
사용자가 입력 한 내용을 정확히 유지하려면 아포스트로피와 모두 같은 SQL을 사용하여 추가 할 수 있습니까? 입력을 반복하고 모든 아포스트로피를 제거하지 않으려합니다.
'Save the memo
Public Sub SaveMemo()
'Examine the memo object
With Forms!frmNotepad!memo
'Set focus to memo in order to get length
.SetFocus
If Len(.Text) > 0 Then
'Save to table
Dim memoContents As String
memoContents = .Text
Dim strSQL As String
strSQL = "INSERT INTO tblContents (Contents)" & _
"VALUES ('" & memoContents & "'); "
'Set the database and execute the SQL
Dim db As Database
Set db = CurrentDb
db.Execute strSQL, dbFailOnError
Else
MsgBox ("Nothing to save!")
End If
End With
End Sub
이제 SQL 주입에 대해 자세히 살펴 보겠습니다.하지만 머리 위로는 Santosh 's보다 우월합니다. – Katana24
@ Katana24 Santosh가 권장하는 방법은 대다수의 SQL 삽입 상황에서 사용자를 보호하지만 일반적으로 방탄으로 간주되지 않습니다. 코드 작성자가 의도 한 것 이외의 작업을 수행하기 위해 데이터베이스 엔진을 "속일"수있는 다른 방법이있을 수 있습니다. Recordset 접근법 (그리고 유사한 * Parameterized SQL * 메커니즘)에 대한 좋은 점은 개발자 (개발자)가 다양한 주입 시스템에 대해 "롤링"할 필요가 없다는 것입니다. 사용자가 호출하는 데이터 액세스 방법이이를 처리합니다. –
일부 독서를 한 후에 나는 당신이 당신의 접근 방식에 맞다고 믿습니다. 악의적 인 문자열 문이 테이블에 저장 될 수 있고, 백엔드 서버 (SQL 서버)에 첨부 된 경우 손상된 데이터를 생성하거나 악화시킬 수 있습니다 (테이블 삭제). 그게 네가 염려 할만한가? – Katana24