source

MySQL에서 작은 따옴표를 이스케이프하는 방법

manysource 2022. 11. 23. 20:21

MySQL에서 작은 따옴표를 이스케이프하는 방법

MySQL에 단일 따옴표 또는 이중 따옴표로 구성된 값을 삽입하려면 어떻게 해야 합니까?

This is Ashok's Pen.

작은 따옴표로 인해 문제가 발생합니다.다른 탈옥 캐릭터가 있을 수 있어요.

데이터를 올바르게 삽입하려면 어떻게 해야 합니까?

간단히 말하면:

SELECT 'This is Ashok''s Pen.';

따라서 문자열 내에서 각 단일 따옴표를 두 개의 따옴표로 바꿉니다.

또는 다음 중 하나를 선택합니다.

SELECT 'This is Ashok\'s Pen.'

탈출 =)

'는 이스케이프 문자입니다.따라서 문자열은 다음과 같습니다.

이것은 아쇼크의 펜입니다.

일부 프런트 엔드 코드를 사용하는 경우 데이터를 저장 프로시저로 전송하기 전에 문자열 치환을 수행해야 합니다.

예를 들어 C#에서는 다음과 같이 할 수 있습니다.

value = value.Replace("'", "''");

저장 프로시저에 값을 전달합니다.

"MySQL에서 문자를 이스케이프하는 방법"에 대한 답변 보기

MySQL과 통신하기 위해 사용하는 라이브러리는 모두 이스케이프 함수가 내장되어 있습니다.예를 들어 PHP에서는 mysqli_real_escape_string 또는 PDO::quote를 사용할 수 있습니다.

다음 코드 사용:

<?php
    $var = "This is Ashok's Pen.";

    mysql_real_escape_string($var);
?>

그러면 데이터베이스가 문자열의 특수 문자를 탐지할 수 없기 때문에 문제가 해결됩니다.

준비된 문구를 사용하면 운전자가 탈출을 처리합니다.예: (Java):

Connection conn = DriverManager.getConnection(driverUrl);
conn.setAutoCommit(false);
PreparedStatement prepped = conn.prepareStatement("INSERT INTO tbl(fileinfo) VALUES(?)");
String line = null;
while ((line = br.readLine()) != null) {
    prepped.setString(1, line);
    prepped.executeQuery();
}
conn.commit();
conn.close();

사용자의 관점에 따라 더 안전할 수도 있고 그렇지 않을 수도 있습니다.특정 문자열 함수를 사용하기 때문에 MySQL 5.6 이후가 필요합니다.

다음과 같은 메시지를 삽입할 수 있습니다.

"아, 머리가 거의 없는 닉은 우아한 손을 흔들며, "중요한 일이 아닙니다." "참가하고 싶지는 않지만... 지원하려고 했는데, 분명히 '요건을 채우지 못했습니다.'

이 견적에는 단일 및 이중 따옴표가 많이 포함되어 있어 MySQL에 삽입하는 것은 매우 번거로운 일입니다.프로그램에서 삽입하면 인용문 등이 빠지기 쉽습니다.그러나 SQL 스크립트에 입력해야 하는 경우 텍스트를 편집해야 합니다(따옴표에서 벗어나기 위해). 이 경우 오류가 발생하기 쉽거나 워드 랩핑 등이 발생할 수 있습니다.

대신 텍스트를 Base64로 인코딩할 수 있으므로 "clean" 문자열이 생성됩니다.

SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K

Base64 인코딩에 대한 주의사항:

  1. Base64-encoding은 바이너리 인코딩이므로 인코딩을 할 때 문자 세트를 올바르게 해야 합니다.MySQL은 Base64로 인코딩된 문자열을 바이트로 디코딩한 후 해석하기 때문입니다.명심하라.base64대해 합니다(UTF-8을합니다).MySQL은 UTF-8을 권장합니다.
  2. Stack Overflow에서 읽기 쉽도록 문자열을 50열로 줄바꿈했습니다.원하는 수의 열로 줄바꿈할 수 있으며(또는 줄바꿈하지 않을 수도 있습니다) 계속 작동합니다.

이제 MySQL에 로드하려면:

INSERT INTO my_table (text) VALUES (FROM_BASE64(' SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K '));

이렇게 하면 불만 없이 삽입되며 문자열 내의 텍스트를 수동으로 이스케이프할 필요가 없습니다.

.\★★★★★★ 。

This is Ashok's Pen.

이하가 됩니다.

This is Ashok\'s Pen.

데이터베이스에 아포스트로피를 보관하려면 다음 코드를 사용합니다.

$new_value = str_replace("'","\'", $value); 

$new_value는 데이터베이스에 저장할 수 있습니다.

이 코드를 사용할 수 있습니다.

<?php
     $var = "This is Ashok's Pen.";
     addslashes($var);
?>

mysqli_real_contract_string()이 동작하지 않는 경우.

PHP에서는 mysqli_real_escape_string을 사용합니다.

PHP 매뉴얼의 예:

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");

$city = "'s Hertogenbosch";

/* this query will fail, cause we didn't escape $city */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("Error: %s\n", mysqli_sqlstate($link));
}

$city = mysqli_real_escape_string($link, $city);

/* this query with escaped $city will work */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("%d Row inserted.\n", mysqli_affected_rows($link));
}

mysqli_close($link);
?>
$var = mysqli_real_escape_string($conn, $_POST['varfield']);

PHP 를 사용하고 있는 경우는, addslash() 함수를 사용합니다.

PHP 수동 추가 슬래시

프로그램 액세스의 경우 플레이스 홀더를 사용하여 안전하지 않은 문자를 자동으로 이스케이프할 수 있습니다.

예를 들어 Perl DBI에서는 다음을 사용할 수 있습니다.

my $string = "This is Ashok's pen";
$dbh->do("insert into my_table(my_string) values(?)",undef,($string)); 

addslahes() 또는 mysql_real_escape_string() 중 하나를 사용합니다.

델파이를 사용하는 방법:

"탈옥"탈옥"

TheString=" bla bla bla 'em some more apo:S 'em and so on ";

솔루션:

StringReplace(TheString, #39,'\'+#39, [rfReplaceAll, rfIgnoreCase]);

결과:

TheString=" bla bla bla \'em some more apo:S \'em and so on ";

이 함수는 모든 Char(39)를 "\"로 대체하여 문제없이 MySQL에 텍스트 필드를 삽입하거나 업데이트할 수 있도록 합니다.

유사한 기능은 모든 프로그래밍 언어에서 찾을 수 있습니다!

MySQL 매뉴얼에서 기능을 확인하실 수 있습니다.

MYSQL 데이터베이스에 저장하고 싶은 API 응답 데이터입니다.견적서, HTML 코드 등이 포함되어 있습니다.

예:-

{

rewardName: "Cabela's eGiftCard $25.00",

shortDescription: '<p>adidas gift cards can be redeemed in over 150 adidas Sport Performance, adidas Originals, or adidas Outlet stores in the US, as well as online at&nbsp;<a href="http://adidas.com/">adidas.com</a>.</p>

terms: '<p>adidas Gift Cards may be redeemed for merchandise on&nbsp;<a href="http://adidas.com/">adidas.com</a>&nbsp;and in adidas Sport Performance, adidas Originals, and adidas Outlet stores in the United States.'

}

솔루션

CREATE TABLE `brand` (
`reward_name` varchar(2048),
`short_description` varchar(2048),
`terms` varchar(2048),  
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

삽입 중에 인은 JSON.stringify()에 이어

    let brandDetails= {
    rewardName: JSON.stringify(obj.rewardName),  
    shortDescription: JSON.stringify(obj.shortDescription),
    term: JSON.stringify(obj.term),
     }

위는 JSON 개체이고 아래는 MySQL에 데이터를 삽입하는 SQL Query입니다.

let query = `INSERT INTO brand (reward_name, short_description, terms) 
VALUES (${brandDetails.rewardName}, 
(${brandDetails.shortDescription}, ${brandDetails.terms})`;

성공했어...

여기에 이미지 설명 입력

아무것도 동작하지 않는 경우는, 다음과 같이 시험해 주세요.

var res = str.replace(/'/g, "\\'");
var res = res.replace(/"/g, "\\\"");

이 명령어는 \escape 문자를 ' 및 '의 모든 항목에 추가합니다.

이것이 문제를 해결하는 올바른 방법인지 프로페셔널한 방법인지 확실하지 않다

효과가 있을 것으로 생각되지만, 실제 내용에서는 모든 따옴표와 큰따옴표가 \자로 바뀝니다.

Python 사용자로서 따옴표를 raw "로 바꿉니다.

don_not_work_str = "This is Ashok's Pen."
work_str = don_not_work_str.replace("'", r"\'")

Python i 입력이 다양하기 때문에 일이 아닌 ''를 탈출하기 위해 여러 가지 방법을 시도했습니다.

마지막으로 이 코드를 사용하면 데이터베이스의 데이터는 입력과 동일합니다.

tmp = val.replace('\\', r'\\')
ret = tmp.replace('"', r'\"')

언급URL : https://stackoverflow.com/questions/887036/how-to-escape-single-quotes-in-mysql