web-dev-qa-db-ja.com

MySqlでアポストロフィ( ')をエスケープする方法

MySQLのドキュメント\'であるべきだと言っています。しかし、sciteとmysqlの両方が''が機能することを示しています。私はそれを見ました、そしてそれはうまくいきます。私は何をすべきか?

124
user4951

あなたが引用しているMySQLのドキュメントは実際にはあなたが言及しているよりもう少し多くを言っています。それはまた言います、

'”で引用された文字列内の“ '”は、“ ''”と書くことができます。

(また、あなたは 表8.1のMySQL 5.0バージョン。特殊文字エスケープシーケンス にリンクしています。現在のバージョンは5.6です。 - しかし現在の 表8.1。特殊文字エスケープシーケンス はかなり似ています。)

私は PostgreSQLのbackslash_quote (string)パラメータに関するメモ が参考になると思います:

これは、引用符を文字列リテラル内の\'で表すことができるかどうかを制御します。引用符を表すためのSQL標準の推奨される方法は、それを2倍にすること('')ですが、PostgreSQLは歴史的に\'も受け入れました。ただし、\'を使用するとセキュリティ上のリスクが発生します。

これは、二重引用符を使用する方が、バックスラッシュを使用して一重引用符をエスケープするよりも、全体的かつ長期的に優れた選択であることを示しています。

言語の選択、SQLデータベースとその非標準的な機能の選択、およびクエリフレームワークの選択を式に追加したい場合は、別の方法を選択することになります。あなたはあなたの制約について多くの情報を与えません。

158
Jim DeLaHunt

標準SQLは二重引用符を使用します。 MySQLはそれを合理的に準拠するために受け入れなければなりません。

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

User2087510が意味していたことは、

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

私もこれをうまく使っています。

8
user3169788

''の代わりに'を書くだけです。'は2回という意味です。

6
MRRaja

私が知っている3つの方法があります。最初のものは最も美しいものではなく、2つ目はほとんどのプログラミング言語で一般的な方法です。

  1. 別の一重引用符を使用してください:'I mustn''t sin!'
  2. 単一のquote\の前にエスケープ文字'を使用します。'I mustn\'t sin!'
  3. 一重引用符ではなく二重引用符を使用して文字列を囲みます。"I mustn't sin!"
3
Robert Rocha

これが例です:

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

一重引用符を囲むには、二重引用符を使用してください。

あなたが一重引用符(と文字をエスケープする必要性)を使うことを主張するなら:

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

PHPでは、mysqli_real_escape_string()を使用して、SQLステートメントで使用する文字列の特殊文字をエスケープするのが好きです。

https://www.php.net/manual/en/mysqli.real-escape-string.php を参照してください

0
will

アポストロフィを含むデータポイントがある場合は、アポストロフィの前にアポストロフィを1つ追加できます。

例えば。 「これはジョンの場所です」

ここでMYSQLは2つの文を仮定しています 'This is John' 'place'

あなたは「これはジョンです」と置くことができます。私はそれがそのように働くべきだと思います。

0
Priyanka Pandhi