programing

MySql에서 아포스트로피(')를 이스케이프하는 방법

goodjava 2022. 12. 20. 21:16

MySql에서 아포스트로피(')를 이스케이프하는 방법

MySQL 문서에는 다음과 같이 기술되어 있습니다.\'단, scite와 mysql 둘 다''효과가 있어요. 저도 봤는데 효과가 있어요.어떻게 해야 하나?

당신이 인용한 MySQL 문서에는 실제로 당신이 언급한 것보다 조금 더 많은 내용이 나와 있습니다.또 이렇게 써있네요.

A “'따옴표로 묶인 문자열 안에 "'"는 "로 표기할 수 있습니다.''”.

(또한 MySQL 5.0 버전의 표 8.1에 링크되어 있습니다). 특수 문자 이스케이프 시퀀스 및 현재 버전은 5.6이지만 현재 표 8.1입니다. 특수 문자 이스케이프 시퀀스는 거의 비슷합니다.)

파라미터의 Postgres 메모는 유익하다고 생각합니다.

이는 견적 마크를 다음 항목으로 나타낼 수 있는지 여부를 제어합니다.\'스트링 리터럴로.SQL의 표준 견적서 표시 방법은 견적서 마크를 2배로 하는 것이 바람직합니다('') 단, PostgreSQL은 과거에도 승인되어 왔습니다.\'단, 의 사용\'보안 리스크 발생...

즉, 단일 따옴표를 피하기 위해 백슬래시를 사용하는 것보다 이중 단일 따옴표를 사용하는 것이 전체적으로나 장기적으로 더 낫다는 것을 의미합니다.

언어 선택, SQL 데이터베이스 선택 및 비표준 쿼리 프레임워크 선택도 방정식에 추가할 수 있습니다.당신은 당신의 제약에 대해 많은 정보를 주지 않습니다.

표준 SQL에서는 두 배의 따옴표를 사용합니다. MySQL은 이를 수용해야 합리적으로 준수할 수 있습니다.

'He said, "Don''t!"'

user2087510이 의미하는 바는 다음과 같습니다.

name = 'something'
name = name.replace("'", "\\'")

이것도 잘 쓰고 있습니다.

내가 알고 있는 세 가지 방법이 있다.첫 번째는 예쁘지 않은 것, 두 번째는 대부분의 프로그래밍 언어에서 일반적인 방법입니다.

  1. 다른 작은 따옴표 사용:'I mustn''t sin!'
  2. 이스케이프 문자 사용\작은 인용문 앞에':'I mustn\'t sin!'
  3. 작은따옴표 대신 큰따옴표를 사용하여 문자열을 묶습니다."I mustn't sin!"

그냥 쓰다''대신해서'내 말은 두 번'

다음은 예를 제시하겠습니다.

SELECT * FROM pubs WHERE name LIKE "%John's%"

큰따옴표를 사용하여 작은따옴표를 묶습니다.

작은 따옴표를 사용해야 하는 경우(및 문자를 이스케이프해야 하는 경우)

SELECT * FROM pubs WHERE name LIKE '%John\'s%'

주제에서 벗어났을 수도 있지만 HTML 양식에서 입력한 텍스트를 삭제하여 사용자가 아포스트로피를 입력할 때 DB에 있는 SQL 기반 테이블에 텍스트를 쓰려고 할 때 오류가 발생하지 않도록 하기 위해 여기에 왔을 수 있습니다.여기에는 몇 가지 방법이 있으며 SQL 주입에 대해서도 읽어보실 수 있습니다.다음은 PHP에서 준비된 문과 바운드 파라미터를 사용하는 예입니다.

$input_str = "Here's a string with some apostrophes (')";
// sanitise it before writing to the DB (assumes PDO)
$sql = "INSERT INTO `table` (`note`) VALUES (:note)";
try {
    $stmt = $dbh->prepare($sql);
    $stmt->bindParam(':note', $input_str, PDO::PARAM_STR);
    $stmt->execute();
} catch (PDOException $e) {
    return $dbh->errorInfo();
}
return "success";

HTML 엔티티 참조를 사용하여 아포스트로피를 저장하는 특별한 경우, PHP에는 htmlspecialchars() 함수가 있습니다.'코멘트가 나타내듯이, 이것은, 예시와 같이, 적절한 위생을 대신하는 것으로는 사용할 수 없습니다.

문자열을 바꿉니다.

value = value.replace(/'/g, "\\'");

여기서 value는 데이터베이스에 저장할 문자열입니다.

더,

이것에 대한 NPM 패키지는, 조사해 볼 수 있습니다.

https://www.npmjs.com/package/mysql-apostrophe

아포스트로피를 사용하는 데이터 포인트가 있으면 아포스트로피 앞에 아포스트로피를 하나 추가할 수 있습니다.

예: '여기는 존의 집입니다.'

여기서 MYSQL은 'John's place'라는 두 문장을 가정합니다.

'여기는 존의 집입니다'라고 쓰면 돼요.그렇게 해야 할 것 같아요.

PHP에서는 mysqli_real_escape_string()을 사용하는 것이 좋습니다.이 mysqli_real_escape_string()은 SQL 문에서 사용하기 위해 문자열 내의 특수 문자를 이스케이프합니다.

https://www.php.net/manual/en/mysqli.real-escape-string.php 를 참조해 주세요.

언급URL : https://stackoverflow.com/questions/9596652/how-to-escape-apostrophe-in-mysql