답변:
간단히 말해서 :
SELECT 'This is Ashok''s Pen.';
따라서 문자열 내에서 각 작은 따옴표를 두 개로 바꿉니다.
또는:
SELECT 'This is Ashok\'s Pen.'
탈출 =)
'는 이스케이프 문자입니다. 따라서 문자열은 다음과 같아야합니다.
이것은 Ashok의 펜입니다
일부 프런트 엔드 코드를 사용하는 경우 데이터를 저장 프로 시저로 보내기 전에 문자열 바꾸기를 수행해야합니다.
예를 들어 C #에서는 다음을 수행 할 수 있습니다.
value = value.Replace("'", "''");
그런 다음 값을 저장 프로 시저에 전달합니다.
''
(작은 따옴표 두 개)는 작은 따옴표 문자를 "이스케이프"하는 데 허용되는 특수 대안입니다.
"MySQL에서 문자를 이스케이프하는 방법"에 대한 내 대답을 참조하십시오.
MySQL과 통신하는 데 사용하는 라이브러리에는 이스케이프 기능이 내장되어 있습니다. 예를 들어 PHP에서는 mysqli_real_escape_string 또는 PDO :: quote를 사용할 수 있습니다.
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.
.
준비된 문을 사용하면 드라이버가 모든 이스케이프를 처리합니다. 예 (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);
?>
이것은 데이터베이스가 문자열의 특수 문자를 감지 할 수 없기 때문에 문제를 해결할 것입니다.
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.
.
당신의 관점에 따라 더 안전 할 수도 있고 아닐 수도있는 또 다른 방법이 있습니다. 특정 문자열 함수를 사용하기 때문에 MySQL 5.6 이상이 필요합니다 : FROM_BASE64
.
삽입하려는 메시지가 있다고 가정 해 보겠습니다.
"아,"거의 머리가없는 닉은 우아한 손을 흔들었다. "중요하지 않은 문제.... 내가 정말로 합류하고 싶었던 것 같지 않다.... 지원할 것이라고 생각했지만, 요구 사항을 충족하지 못한 것 같다. '- "
그 따옴표에는 작은 따옴표와 큰 따옴표가 많이 있으며 MySQL에 삽입하는 것은 정말 고통 스러울 것입니다. 프로그램에서 삽입하는 경우 따옴표 등을 이스케이프하기 쉽습니다.하지만 SQL 스크립트에 입력해야하는 경우 오류가 발생할 수있는 텍스트를 편집해야합니다 (따옴표를 이스케이프 처리). 또는 줄 바꿈 등에 민감합니다.
대신 텍스트를 Base64로 인코딩 할 수 있으므로 "깨끗한"문자열이됩니다.
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
Base64 인코딩에 대한 몇 가지 참고 사항 :
base64
및 MySQL은 문자 인코딩이 무엇인지에 동의합니다 (I는 UTF-8을 권장합니다).이제 이것을 MySQL로로드하려면 :
INSERT INTO my_table (text) VALUES (FROM_BASE64('
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));
이것은 불만없이 삽입되며 문자열 내부의 텍스트를 수동으로 이스케이프 할 필요가 없습니다.
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를 사용하는 경우에는 addlashes () 함수를 사용하십시오.
addlahes () 또는 mysql_real_escape_string ()을 사용하십시오.
This, mysql_real_escape_string() extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.
.
Delphi를 사용하는 방식 :
"이스케이프"할 TheString :
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에서 텍스트 필드를 삽입하거나 업데이트 할 수 있습니다.
비슷한 기능이 모든 프로그래밍 언어에서 발견됩니다!