2016-12-19 2 views
0

을하고 난 문자열로 테이블을 업데이트하려고 시도 파이썬에서이 기능을 가지고 : 구문 오류.파이썬 sqlite3를 구문 오류 갱신

문자열을 데이터베이스에 추가 할 수 있도록 "val"값을 어떻게 처리해야합니까?

== 업데이트 == 이 쿼리를 시도하고 작동하지 않았다 중 하나

table.execute("UPDATE " + tableName + " SET " + 
         colName + "=" + colValue + 
         " WHERE " + name + "= ?", (val,)) 
+1

""val "값을 어떻게 처리해야합니까? 취약한 문자열 연결 대신 매개 변수화 된 쿼리를 사용하십시오. – DeepSpace

+0

@DeepSpace에 대해 자세히 설명해 주시겠습니까? – acbh

+0

https://en.wikipedia.org/wiki/SQL_injection –

답변

-2

SQL 쿼리에서 직접 변수를 사용하여 주요 결함이 있습니다

http://www.w3schools.com/sql/sql_injection.asp

읽기 그 (것)들에 더 많은 것을 위로. 당신은 당신의 코드가 작동을하고 싶어하지만 만약 당신이 다음과 같이 변경 할 수 있습니다 : 발/colVal 이후

table.execute("UPDATE " + tableName + " SET " + 
         colName + "='" + colVal + 
         "' WHERE " + name + "=('" + val + "')") 
table.commit() 

를이 탈출해야하므로 쿼리에 전달되는 문자열입니다. @Deepspace이 코멘트에 지적한 바와 같이 https://gist.github.com/vi3k6i5/869d299e8afe99593b79ae41051ebf63

가 직접 DB에서 실행되는 SQL이 안전하지 :

작동 여기 샘플 예제를 추가했습니다.

따라서이 모든 작업을 수행하는 좋은 방법은 ORM을 사용하는 것입니다. 비슷한 것 django 또는 SQLalchemy

예제를 통해 매우 간단합니다. 그리고 그들은 DB를 변경하기위한 그들 자신의 구조를 가지고 있습니다. 업데이트/삽입/삭제.

+0

'var = " 'OR'1 '='1 ''데이터베이스가 있습니다. – DeepSpace

+0

@DeepSpace 알아요. 그의 코드에서 무엇이 잘못되었는지를 지적하십시오. 그렇지 않으면 어떻게 배우게됩니까? –

+0

시도했으나 작동하지 않았다 – acbh