MySQLのドキュメントは、それがあるべきと述べています\'
。ただし、siteとmysqlの両方で''
機能します。私はそれを見て、うまくいきました。私は何をすべきか?
\'
MySQL固有''
ですが、誤解しない限りANSI SQLに準拠しています
MySQLのドキュメントは、それがあるべきと述べています\'
。ただし、siteとmysqlの両方で''
機能します。私はそれを見て、うまくいきました。私は何をすべきか?
\'
MySQL固有''
ですが、誤解しない限りANSI SQLに準拠しています
回答:
あなたが引用するMySQLのドキュメントは、実際にはあなたが言及するよりも少し多くを述べています。また、
「
'
」で囲まれた文字列内の「'
」は、「」と書くことができます''
。
(また、MySQL 5.0バージョンのTable 8.1。Special Character Escape Sequencesにリンクしており、現在のバージョンは5.6ですが、現在のTable 8.1。Special Character Escape Sequencesは非常によく似ています。)
パラメータに関するPostgresのメモは参考backslash_quote (string)
になると思います。
これは、引用符を
\'
文字列リテラルで表すことができるかどうかを制御します。引用符を表すための推奨されるSQL標準の方法は、引用符を2倍にすることです(''
)が、PostgreSQLも歴史的に受け入れてい\'
ます。ただし、を使用すると\'
セキュリティリスクが生じます...
これは、二重引用符を二重引用符でエスケープするために使用するよりも、二重引用符文字を使用する方が全体的かつ長期的にはより良い選択であると私に言います。
ここで、言語の選択、SQLデータベースの選択とその非標準の癖、およびクエリフレームワークの選択を方程式に追加したい場合は、別の選択肢になる可能性があります。あなたはあなたの制約についてあまり情報を与えません。
標準SQLは二重引用符を使用します。MySQLはそれを合理的に準拠するために受け入れる必要があります。
'He said, "Don''t!"'
'
」で囲まれた文字列内の「'
」は''
「 。「"
」で囲まれた文字列内の「"
」は、「」と書くことができます""
。引用文字の前にエスケープ文字(「」)を付けます。
user2087510の意味は次のとおりです。
name = 'something'
name = name.replace("'", "\\'")
私もこれを成功させました。
次に例を示します。
SELECT * FROM pubs WHERE name LIKE "%John's%"
二重引用符を使用して、単一引用符を囲みます。
一重引用符の使用を主張する場合(および文字をエスケープする必要がある場合):
SELECT * FROM pubs WHERE name LIKE '%John\'s%'
私が知っている方法は3つあります。1つ目はかわいらしくなく、2つ目はほとんどのプログラミング言語で一般的な方法です。
'I mustn''t sin!'
\
一重引用符の前にエスケープ文字を使用します'
。'I mustn\'t sin!'
"I mustn't sin!"
\'
、非常に多くのプログラミング言語で使用されていますが''
、より多くのSQL方言でサポートされているため、互換性のためにオプション1を使用することをお勧めします。たとえば、Sqliteはバックスラッシュエスケープでは機能しません。
文字列を置き換える
value = value.replace(/'/g, "\\'");
ここで、valueはデータベースに格納する文字列です。
さらに、
このためのNPMパッケージ、あなたはそれを調べることができます
アポストロフィがあるデータポイントがある場合は、アポストロフィの前にアポストロフィを1つ追加できます。
例えば。「これはジョンの家です」
ここでMYSQLは2つの文「これはジョンです」の場所を想定しています
「これはジョンです」という場所を置くことができます。そのように機能するはずです。
PHPでは、SQLステートメントで使用する文字列内の特殊文字をエスケープするmysqli_real_escape_string()を使用するのが好きです。
https://www.php.net/manual/en/mysqli.real-escape-string.phpを参照してください
おそらくトピック外ですが、HTMLフォームからのテキスト入力をサニタイズする方法を探してここに来たので、ユーザーがアポストロフィ文字を入力しても、SQLにテキストを書き込もうとしたときにエラーがスローされません。ベースのテーブル。これを行うにはいくつかの方法があり、SQLインジェクションについても読みたいと思うかもしれませんが、PHPの簡単なオプションは、すべてのアポストロフィをおそらく格納したいものに変換するhtmlspecialchars()関数を使用する'
ことです。とにかく。
''
か、\'
正しいですか?