2009-02-04 5 views
1

내 테이블은 다음과 같습니다오류 업데이트 행

CREATE TABLE A(
    id serial NOT NULL, 
    date timestamp without time zone, 
    type text, 
    sub_type text, 
    filename text, 
    filepath text, 
    filesize integer, 
); 

내가 업데이트 루틴이 있습니다

$Query = "UPDATE A SET type=\"" . $strType . "\" where id=" . intval($ID); 

문제 :

$ strType이 문자열 "상추"와 같은 경우를 이 오류가 발생합니다 :

ERROR: column "lettuce" does not exist 

int이며 오류가 없습니다.

아이디어가 있으십니까?

더 배경 :

  • 삽입 코드는 파일 이름, 파일 경로, SQL에서 성공적으로

답변

4

모두 텍스트 유형, 따옴표는 식별자 구분 기호입니다을 추가합니다. UPDATE 문에서 type 열의 값을 "lettuce" 열로 설정하려고했는데 lettuce라는 열이 없으면 오류가 발생합니다.

$Query = "UPDATE A SET type='" . $strType . "' where id=" . intval($ID); 

도 참조 "Do different databases use different name quote?"

3

코딩은 SQL 주입에 열려 :

당신은 SQL에서 리터럴 문자열을 구분하는 작은 따옴표를 사용하고 싶습니다. 자리 표시 자 (따옴표 제외)를 사용하고 별도로 값을 전달하십시오. 따라서 XKCD의 문제는 해결됩니다.

빌은 열 이름과 문자열에 대한 즉각적인 문제에 대한 답을 제공합니다.

+0

의견에 감사드립니다. – cbrulak