407

アポストロフィを含む値を挿入するための正しい SQL 構文は何ですか?

Insert into Person
  (First, Last)
Values
  'Joe',
  'O'Brien'

O の後のアポストロフィが値の終了タグだと思うので、エラーが発生し続けます。

4

11 に答える 11

617

SQL でアポストロフィをエスケープします (つまり、一重引用符を二重にします)。

INSERT INTO Person
    (First, Last)
VALUES
    ('Joe', 'O''Brien')
              /\
          right here  

同じことが SELECT クエリにも当てはまります。

SELECT First, Last FROM Person WHERE Last = 'O''Brien'

アポストロフィ (単一引用符) は、文字列データの先頭と末尾を指定する SQL の特殊文字です。escapeこれは、特殊文字が必要なリテラル文字列データの一部として使用することを意味します。単一引用符の場合、これは通常、引用符を 2 倍にすることで実現されます。(単一引用符の代わりに二重引用符ではなく、2 つの単一引用符文字。)

: この問題について心配する必要があるのは、未加工の SQL インターフェースを介してデータを手動で編集する場合のみです。これは、開発やテスト以外でクエリを作成することはめったにないためです。コードには、特殊文字のエスケープ、 SQL インジェクションなどを処理するテクニックとフレームワーク (スタックによって異なります) があります。

于 2009-12-16T03:35:58.787 に答える
50

一重引用符を2倍にするだけです...

insert into Person (First, Last)
values ('Joe', 'O''Brien')
于 2009-12-16T03:36:55.290 に答える
30

アポストロフィをエスケープする必要があります。T-SQL では、これはアポストロフィが 2 つ付いているため、insertステートメントは次のようになります。

Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'
于 2009-12-16T03:35:32.750 に答える
19

文字列の開始と終了を示すために単一引用符が使用されているためです。あなたはそれをエスケープする必要があります。

短い答えは、2 つの単一引用符を使用すること''です。これは、SQL データベースが値を'.

REPLACE を使用して入力値をサニタイズする方法を見てください。

をチェックし、それらが文字列に存在する場合は、単一の一重引用符をエスケープするために''''それらを置き換えます。''''''

于 2009-12-16T04:20:18.243 に答える
5

eduffy はいい考えを思いつきました。彼は自分のコード例でそれを逆にしただけです。JavaScript または SQLite のいずれかで、アポストロフィをアクセント記号に置き換えることができます。

彼は (偶然にも確信していますが) O'Brian のアポストロフィを置き換える代わりに、文字列の区切り記号としてアクセント記号を配置しました。実際、これはほとんどの場合、非常に単純な解決策です。

于 2015-03-04T14:32:12.857 に答える
4

アポストロフィ文字は、アポストロフィのASCII テーブル ルックアップ値 39 を指定してCHAR関数を呼び出すことで挿入できます。その後、文字列値を連結演算子で連結できます。

Insert into Person
  (First, Last)
Values
  'Joe',
  concat('O',char(39),'Brien')
于 2016-07-12T11:57:57.173 に答える
0

これは、API 応答としての私のデータがどのように見えるかであり、MYSQL データベースに保存したいと考えています。引用符、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 クエリです。

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

その働き....

ここに画像の説明を入力

于 2021-06-21T04:03:14.827 に答える
-2

代わりに (~ キーで) バッククォートを使用してください。

`O'Brien`
于 2009-12-16T03:35:47.480 に答える