-1

Xml からテキストを読み取ってデータベースに入れるときに、テキストに '(apostrophe) が含まれているとエラーが発生します。DB への挿入中にこの問題を解決する方法。

4

4 に答える 4

2

アポストロフィの前に \ (バックスラッシュ) を追加します。テキスト エディタを使用して検索を実行し、'toのすべてを置換するとうまく\'いくはずです。XML 構造を台無しにしないように注意してください。

元。

ジョンズ

する必要がある

ジョンズ

PHP または C# を使用してエスケープすることもできます。これがPHP 関数です。

于 2013-05-21T17:25:11.510 に答える
1

そのための言語固有の方法論を使用して、入力データを常にエスケープする必要があります。MySQL の場合、エスケープ文字は\. もう 1 つの方法は、パラメーター化された入力で準備済みステートメントを使用することです。これにより、単一のアポストロフィをエスケープする必要がなくなります。

私の推測では、あなたのやり方にも重大な SQL インジェクションの脆弱性があると思います。入力値をエスケープしたり、パラメータ化されたプリペアド ステートメントを使用したりしていない場合、悪意のあるコードを XML に簡単に挿入できます。

于 2013-05-21T17:23:34.747 に答える
0

MySQLリファレンスの9.1.1文字列リテラルから:

文字列内に引用符を含める方法はいくつかあります。

「'」で囲まれた文字列内の「'」は、「''」と表記される場合があります。

「」「"」で引用された文字列内 """ と表記される場合があります。

引用符の前にエスケープ文字 (「\」) を置きます。

「"」で囲まれた文字列内の「'」特別な処理は必要なく、2 倍にしたりエスケープしたりする必要もありません。同様に、「」「'」で引用された文字列内では、特別な処理は必要ありません。

したがって、指定された文字列は MySQL 1foo'barで記述できます。

'foo''bar'
'foo\'bar'
"foo'bar"

上記は主要な質問に対処していますが、プレースホルダー (別名、準備済みステートメント) を使用して、言語/アダプターごとに正しい方法を調べてください。プレースホルダーを使用すると、引用符を付ける必要がなくなり (カスタム ロジックによって引き起こされる間違いを防ぐことができます) 悪意のある SQL インジェクションの多くのケースを防ぐことができます。


1 MySQL によって選択される構文は、他の一般的な SQL 実装とは異なります。この構文は普遍的ではありません。

于 2013-05-21T21:04:34.733 に答える