programing

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

nasanasas 2020. 9. 1. 07:36
반응형

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


작은 따옴표 또는 큰 따옴표로 구성된 MySQL에 값을 어떻게 삽입합니까?

This is Ashok's Pen.

작은 따옴표는 문제를 일으킬 것입니다. 다른 이스케이프 문자가있을 수 있습니다.

데이터를 올바르게 삽입하는 방법은 무엇입니까?


간단히 말해서 :

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

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

또는:

SELECT 'This is Ashok\'s Pen.'

탈출 =)


"MySQL에서 문자를 이스케이프하는 방법"에 대한 내 대답을 참조하십시오.

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


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

이것은 Ashok의 펜입니다

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

예를 들어 C #에서는 다음을 수행 할 수 있습니다.

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

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


준비된 문을 사용하면 드라이버가 모든 이스케이프를 처리합니다. 예 (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();

이 코드를 사용하십시오.

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

    mysql_real_escape_string($var);
?>

이것은 데이터베이스가 문자열의 특수 문자를 감지 할 수 없기 때문에 문제를 해결할 것입니다.


당신의 관점에 따라 더 안전 할 수도 있고 아닐 수도있는 또 다른 방법이 있습니다. 특정 문자열 함수를 사용하기 때문에 MySQL 5.6 이상이 필요합니다 : FROM_BASE64.

삽입하려는 메시지가 있다고 가정 해 보겠습니다.

"아,"거의 머리가없는 닉은 우아한 손을 흔들었다. "중요하지 않은 문제.... 내가 정말 합류하고 싶었던 것 같지 않다.... 지원할 생각은했지만, 요구 사항을 충족하지 못하는 것 같다. '- "

그 따옴표에는 작은 따옴표와 큰 따옴표가 많이 있으며 MySQL에 삽입하는 것은 정말 고통 스러울 것입니다. 프로그램에서 삽입하는 경우 따옴표 등을 이스케이프하기 쉽습니다.하지만 SQL 스크립트에 입력해야하는 경우 오류가 발생할 수있는 텍스트를 편집해야합니다 (따옴표를 이스케이프 처리). 또는 줄 바꿈 등에 민감합니다.

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

JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K

Base64 인코딩에 대한 몇 가지 참고 사항 :

  1. Base64 인코딩은 바이너리 인코딩 이므로 MySQL이 Base64로 인코딩 된 문자열을 바이트로 디코딩 한 다음 해석 할 것이기 때문에 인코딩을 수행 할 때 올바른 문자 집합을 가져 오는지 확인하는 것이 좋습니다. 확인 base64및 MySQL은 문자 인코딩이 무엇인지에 동의합니다 (I는 UTF-8을 권장합니다).
  2. I've wrapped the string to 50 columns for readability on Stack Overflow. You can wrap it to any number of columns you want (or not wrap at all) and it will still work.

Now, to load this into MySQL:

SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));

This will insert without any complaints, and you didn't have to manually-escape any text inside the string.


You should escape the special characters using the \ character.

This is Ashok's Pen.

Becomes:

This is Ashok\'s Pen.

If you want to keep (') apostrophe in the database use this below code

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

$new_value can store in database.


You can use this code,

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

if mysqli_real_escape_string() does not work.


In PHP, use mysqli_real_escape_string.

Example from the PHP Manual:

<?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']);

If you are using PHP, just use the addslashes() function.

PHP Manual addslashes


For programmatic access, you can use placeholders to automatically escape unsafe characters for you.

In Perl DBI, for example, you can use:

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

Use either addslahes() or mysql_real_escape_string().


The way I do, by using Delphi:

TheString to "escape":

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

Solution:

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

Result:

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

This function will replace all Char(39) with "\'" allowing you to insert or update text fields in MySQL without any problem.

Similar functions are found in all programming languages!


Maybe you could take a look at function QUOTE in the MySQL manual.

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

반응형