source

MySQL 데이터베이스에 쓰는 동안 아포스트로피를 처리하는 방법

factcode 2022. 9. 21. 23:24
반응형

MySQL 데이터베이스에 쓰는 동안 아포스트로피를 처리하는 방법

다음 오류가 발생하였습니다.

SQL 구문에 오류가 있습니다. MySQL Server 버전에 해당하는 설명서에서 's', 'portal', 'offering', 'MSNBC', 'News', 'sports', 'MSN' 'Money'에서 사용할 올바른 구문을 확인하십시오.

유일한 문제는 아포스트로피가 포함된 데이터를 삽입할 때 이 오류가 나타난다는 것입니다.데이터 유형 변경을 시도했습니다.VARCHAR로.TEXT하지만 결과는 그대로입니다.

넣으려고 했는데addslashes()

이거 어떻게 고쳐야 돼요?

$query=" INSERT INTO alltags
 (id,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10,tag11,tag12,tag13,tag14,tag15,tag16,tag17,tag18,tag19,tag20,tag21,tag22,tag23,tag24,tag25,tag26,tag27,tag28,tag29,tag30)
VALUES      
 ('',mysql_real_escape_string($uniqkey[0]),mysql_real_escape_string($uniqkey[1]),mysql_real_escape_string($uniqkey[2]),mysql_real_escape_string($uniqkey[3]),mysql_real_escape_string($uniqkey[4]),mysql_real_escape_string($uniqkey[5]),mysql_real_escape_string($uniqkey[6]),mysql_real_escape_string($uniqkey[7]),mysql_real_escape_string($uniqkey[8]),mysql_real_escape_string($uniqkey[9]),mysql_real_escape_string($uniqkey[10]),mysql_real_escape_string($uniqkey[11]),mysql_real_escape_string($uniqkey[12]),mysql_real_escape_string($uniqkey[13]),mysql_real_escape_string($uniqkey[14]),mysql_real_escape_string($uniqkey[15]),mysql_real_escape_string($uniqkey[16]),mysql_real_escape_string($uniqkey[17]),mysql_real_escape_string($uniqkey[18]),mysql_real_escape_string($uniqkey[19]),mysql_real_escape_string($uniqkey[20]),mysql_real_escape_string($uniqkey[21]),mysql_real_escape_string($uniqkey[22]),mysql_real_escape_string($uniqkey[23]),mysql_real_escape_string($uniqkey[24]),mysql_real_escape_string($uniqkey[25]),mysql_real_escape_string($uniqkey[26]),mysql_real_escape_string($uniqkey[27]),mysql_real_escape_string($uniqkey[28]),mysql_real_escape_string($uniqkey[29])) "; 
mysql_query($query) or die(mysql_error());

로 바꿨습니다.mysql_real_escape_string이 구문이 맞습니까?에러가 발생하고 있다.

MySQL이 해석할 수 있는 문자를 포함하는 데이터를 인코딩하는 프로세스를 "에스케이프"라고 합니다.에 대한 속박에서 벗어나야 한다.mysql_real_escape_string이것은 MySQL 함수가 아닌 PHP 함수입니다.즉, 쿼리를 데이터베이스에 전달하기 전에 PHP에서 실행해야 합니다.외부 소스에서 프로그램으로 들어오는 데이터는 모두 이스케이프해야 합니다.이스케이프되지 않은 데이터는 SQL 주입 가능성이 있습니다.

쿼리를 작성하기 전에 데이터를 이스케이프해야 합니다.또한 PHP의 루프 구조 및 를 사용하여 프로그래밍 방식으로 쿼리를 작성할 수 있습니다.

// Build tag fields
$tags = 'tag' . implode(', tag', range(1,30));

// Escape each value in the uniqkey array
$values = array_map('mysql_real_escape_string', $uniqkey);

// Implode values with quotes and commas
$values = "'" . implode("', '", $values) . "'";

$query = "INSERT INTO alltags (id, $tags) VALUES ('', $values)";

mysql_query($query) or die(mysql_error());

mysql_real_escape_string을 사용하는 것이 SQL 삽입/갱신을 위한 문자를 처리하는 데 보다 안전한 방법입니다.

INSERT INTO YOUR_TABLE
VALUES
  (mysql_real_escape_string($var1),
   mysql_real_escape_string($var2))

또한 TEXT에서 VARCHAR로 다시 컬럼을 변경합니다.색인 외에도 검색이 훨씬 효과적입니다.

업데이트용 업데이트

그렇게 되면idauto_discolumn은 다음 작업을 수행할 수 있습니다.

  • 열 목록에서 제외되므로 VALUES 절에 값을 입력할 필요가 없습니다.

    INSERT INTO alltags
      (tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10,tag11,tag12,tag13,tag14,tag15,tag16,tag17,tag18,tag19,tag20,tag21,tag22,tag23,tag24,tag25,tag26,tag27,tag28,tag29,tag30)
    VALUES      
      (mysql_real_escape_string($uniqkey[0]),mysql_real_escape_string($uniqkey[1]),mysql_real_escape_string($uniqkey[2]),mysql_real_escape_string($uniqkey[3]),mysql_real_escape_string($uniqkey[4]),mysql_real_escape_string($uniqkey[5]),mysql_real_escape_string($uniqkey[6]),mysql_real_escape_string($uniqkey[7]),mysql_real_escape_string($uniqkey[8]),mysql_real_escape_string($uniqkey[9]),mysql_real_escape_string($uniqkey[10]),mysql_real_escape_string($uniqkey[11]),mysql_real_escape_string($uniqkey[12]),mysql_real_escape_string($uniqkey[13]),mysql_real_escape_string($uniqkey[14]),mysql_real_escape_string($uniqkey[15]),mysql_real_escape_string($uniqkey[16]),mysql_real_escape_string($uniqkey[17]),mysql_real_escape_string($uniqkey[18]),mysql_real_escape_string($uniqkey[19]),mysql_real_escape_string($uniqkey[20]),mysql_real_escape_string($uniqkey[21]),mysql_real_escape_string($uniqkey[22]),mysql_real_escape_string($uniqkey[23]),mysql_real_escape_string($uniqkey[24]),mysql_real_escape_string($uniqkey[25]),mysql_real_escape_string($uniqkey[26]),mysql_real_escape_string($uniqkey[27]),mysql_real_escape_string($uniqkey[28]),mysql_real_escape_string($uniqkey[29])) "; 
    
  • 포함하다id열 목록에서 VALUES 절의 해당 위치에 값을 사용해야 합니다.

    • NULL
    • DEFAULT

다음은 NULL을 ID 자리 표시자로 사용하는 예입니다.

INSERT INTO alltags
  (id,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10,tag11,tag12,tag13,tag14,tag15,tag16,tag17,tag18,tag19,tag20,tag21,tag22,tag23,tag24,tag25,tag26,tag27,tag28,tag29,tag30)
 VALUES      
  (NULL,mysql_real_escape_string($uniqkey[0]),mysql_real_escape_string($uniqkey[1]),mysql_real_escape_string($uniqkey[2]),mysql_real_escape_string($uniqkey[3]),mysql_real_escape_string($uniqkey[4]),mysql_real_escape_string($uniqkey[5]),mysql_real_escape_string($uniqkey[6]),mysql_real_escape_string($uniqkey[7]),mysql_real_escape_string($uniqkey[8]),mysql_real_escape_string($uniqkey[9]),mysql_real_escape_string($uniqkey[10]),mysql_real_escape_string($uniqkey[11]),mysql_real_escape_string($uniqkey[12]),mysql_real_escape_string($uniqkey[13]),mysql_real_escape_string($uniqkey[14]),mysql_real_escape_string($uniqkey[15]),mysql_real_escape_string($uniqkey[16]),mysql_real_escape_string($uniqkey[17]),mysql_real_escape_string($uniqkey[18]),mysql_real_escape_string($uniqkey[19]),mysql_real_escape_string($uniqkey[20]),mysql_real_escape_string($uniqkey[21]),mysql_real_escape_string($uniqkey[22]),mysql_real_escape_string($uniqkey[23]),mysql_real_escape_string($uniqkey[24]),mysql_real_escape_string($uniqkey[25]),mysql_real_escape_string($uniqkey[26]),mysql_real_escape_string($uniqkey[27]),mysql_real_escape_string($uniqkey[28]),mysql_real_escape_string($uniqkey[29])) "; 

컬럼을 그렇게 설정해서는 안 된다는 것을 강조하고 싶습니다.

Meagar의 답변이 약간 개선되었습니다.

편집: 미거가 글을 업데이트해서 답변이 더 좋아졌어요.

$query = 'INSERT INTO alltags (id, ';

// append tag1, tag2, etc.
$query .= 'tag' . implode(', tag', range(1, 30)) . ") VALUES ('', ";

// escape each value in the uniqkey array
$escaped_tags = array_map('mysql_real_escape_string', $uniqkey);

// implode values with quotes and commas, and add closing bracket
$query .= "'" . implode("', '", $escaped_tags) . "')";

// actually query
mysql_query($query) or die(mysql_error());

미거스 정답을 보세요.이것은 올바른 코드입니다.

잘못된 mysql_query() 함수를 사용하려면 다음과 같이 SQL 문자열을 분할해야 합니다.

mysql_query(
    "INSERT INTO whateever (col1,col2,col3,col4) VALUES ("
    . mysql_real_escape_string($col1) 
    . ","
    . mysql_real_escape_string($col2) 
    . ","       
    . mysql_real_escape_string($col3) 
    . ","
    . mysql_real_escape_string($col4) 
    . ")"
);

또는 어레이가 있기 때문에 현명한 메서드 호출을 사용하여 한꺼번에 이스케이프합니다.

$uniqkey = array_map("mysql_real_escape_string", $uniqkey);

mysql_query("USE THE ESCAPED ARRAY THEN DIRECTLY ('$uniqkey[0]', '$uniqkey[1]', '$uniqkey[2]', '$uniqkey[3]', ...");

언급URL : https://stackoverflow.com/questions/4056922/how-to-deal-with-an-apostrophe-while-writing-into-a-mysql-database

반응형