2016-06-13 4 views
0

MySQL 데이터베이스에 기사 전체를 삽입하려하지만 작동하지 않았습니다. 인쇄 할 때 인코딩 시작 문제가 발생했다고 생각합니다. '[u'을 사용하여 을 시작했습니다. . 일부 코드를 시도했지만 작동하지 않았다. 컨텐츠/문서는 SQL 텍스트 내 코드, 그것은 오류 입력을 제기한다 MySQL 파이썬에 기사를 삽입 할 수 없습니다.

을 엉망 결과 ,"를 포함 할 수 있습니다 ..

k1 = str(mmhtml) 
    for filde in cur.fetchall(): 
     faliase = filde[0] 
     fpattern = filde[1] 
     furutan = filde[2] 
     fopsi = filde[3] 
     freplacer = filde[4] 
     k1 = re.sub(fpattern , freplacer, k1) 
     k2 = k1.encode('ascii') 

    Item['konten'] = k2.strip() 

    sqlinsert = "INSERT IGNORE INTO tb_hasil(title, \ 
      datee, content, author, ling) \ 
      VALUES ('%s', '%s', '%s', '%s', '%s')" % \ 
      (jdl, tgl, k2.strip() , sauto,str(response.url)) 
    try: 
     cur.execute(sqlinsert) 
    except: 
     print "error input" 

덕분에 사전에

+1

여기에는 여러 가지 문제가 있으며 입력에 대한 자세한 내용은 제공하지 않습니다. 인수로리스트를 전달하는 것 같습니다 (문자열 형식화 결과로''[u'']). 처음에는 ** 문자열 형식을 사용하여 값을 전달하지 마십시오 ** (여기서는'%'연산자). 당신은 단순히 그것의 버릇을 만들어서는 안됩니다. 대신 자리 표시 자/준비 문을 사용하십시오. '% s' 포맷터에서 작은 따옴표를 제거하고 인수 튜플을'cur.execute()'에 개별적으로 전달하십시오 : cur.execute (sqlinsert, (jdl, tgl, ...))'. 그런 식으로 자신을 벗어나는 것에 대해 걱정할 필요가 없습니다. –

+0

이것은 코드를 수정하지는 않지만보다 안전한 코드를 만드는 단계입니다. –

+0

@ IljaEverilä 답장을 보내 주셔서 감사합니다. 귀하의 제안을 구현하려고합니다. 저는 파이썬에서 새롭기 때문에, 제가 발견 한 예제를 기반으로했습니다. – insecte

답변

0

안녕하는 라이브러리를 할 용도?

필자가 아는 한 대부분의 라이브러리는 DB-API 공유를 구현합니다. 따라서 SQL 주입을 방지하는 매개 변수화를 통해 데이터를 보낼 수 있습니다.

나는 파이썬에서 oursql 사용하고 및 구문은 다음과 같습니다

curs.execute('SELECT * FROM `some_table` WHERE `col1` = ? AND `col2` = ?', 
(42, -3)) 

그래서 당신은 으로 값을 대체?을 입력하고 튜플에 매개 변수를 전달하십시오.

//curs.execute("... INTO Values (?, ?, ?)", (1,2,3)) 
+0

나는 mysqldb를 사용하고 있습니다 .. – insecte

+0

또한 DB-API 규칙을 따르고 있습니다 : % s! 예 : //curs.execute ("... INTO 값 (% s, % s, % s)", (1,2,3)) – cinatic

관련 문제