복붙노트

[SQL] SQL 쿼리 내에서 단일 인용 탈출

SQL

SQL 쿼리 내에서 단일 인용 탈출

나는 이름과 주소를라는 두 개의 열이있는 테이블 회사를 보유하고 있습니다. 다음 코드를 실행하여, 새로운 데이터가 테이블에 삽입 :

my_name = "my company name"
my_address = "ABC"

query = "INSERT INTO companies (name,address) VALUES ('#{my_name}','#{my_address}');"

ActiveRecord::Base.connection.execute(query);

나는 "요한의 회사"에서 "내 회사 이름"에서 my_name 값을 변경하면, 나는 구문 오류가 발생합니다. 쿼리가되기 때문입니다 :

"INSERT INTO companies (name,address) VALUES ('John's company','ABC');"

과 '요한의 회사는'그 안에 작은 따옴표가있다.

이미 쿼리 문자열 정의에 큰 따옴표를 사용하고 있음을 감안할 때, 내가 어떻게 내 값에 작은 따옴표에 대한이 오류를 제거받을 수 있나요?

해결법

  1. ==============================

    1.당신이이 방법을 수행해야하는 경우 다음 연결 개체의 인용 방법을 사용하십시오

    당신이이 방법을 수행해야하는 경우 다음 연결 개체의 인용 방법을 사용하십시오

    이 같은 그래서 :

    my_name    = ActiveRecord::Base.connection.quote("John O'Neil")
    my_address = ActiveRecord::Base.connection.quote("R'lyeh")
    
    query = "INSERT INTO companies (name,address) VALUES (#{my_name}, #{my_address})"
    
    ActiveRecord::Base.connection.execute(query);
    

    결코 지금까지 자신의 인용을 처리하려고합니다. 그리고는 SQL 문자열 리터럴을 인용 부호 큰 따옴표를 사용하기위한 하나의 어떤 따옴표 그의를하지 않는다; 큰 따옴표는 대부분의 데이터베이스에서 (예 : 테이블 및 열 이름 등) 식별자를 인용 부호하지만 MySQL은 그것을 위해 역 따옴표를 사용합니다.

  2. from https://stackoverflow.com/questions/8179760/escaping-a-single-quotation-within-sql-query by cc-by-sa and MIT license