Xml からテキストを読み取ってデータベースに入れるときに、テキストに '(apostrophe) が含まれているとエラーが発生します。DB への挿入中にこの問題を解決する方法。
4 に答える
アポストロフィの前に \ (バックスラッシュ) を追加します。テキスト エディタを使用して検索を実行し、'
toのすべてを置換するとうまく\'
いくはずです。XML 構造を台無しにしないように注意してください。
元。
ジョンズ
する必要がある
ジョンズ
PHP または C# を使用してエスケープすることもできます。これがPHP 関数です。
そのための言語固有の方法論を使用して、入力データを常にエスケープする必要があります。MySQL の場合、エスケープ文字は\
. もう 1 つの方法は、パラメーター化された入力で準備済みステートメントを使用することです。これにより、単一のアポストロフィをエスケープする必要がなくなります。
私の推測では、あなたのやり方にも重大な SQL インジェクションの脆弱性があると思います。入力値をエスケープしたり、パラメータ化されたプリペアド ステートメントを使用したりしていない場合、悪意のあるコードを XML に簡単に挿入できます。
MySQLリファレンスの9.1.1文字列リテラルから:
文字列内に引用符を含める方法はいくつかあります。
「'」で囲まれた文字列内の「'」は、「''」と表記される場合があります。
「」「"」で引用された文字列内 """ と表記される場合があります。
引用符の前にエスケープ文字 (「\」) を置きます。
「"」で囲まれた文字列内の「'」特別な処理は必要なく、2 倍にしたりエスケープしたりする必要もありません。同様に、「」「'」で引用された文字列内では、特別な処理は必要ありません。
したがって、指定された文字列は MySQL 1foo'bar
で記述できます。
'foo''bar'
'foo\'bar'
"foo'bar"
上記は主要な質問に対処していますが、プレースホルダー (別名、準備済みステートメント) を使用して、言語/アダプターごとに正しい方法を調べてください。プレースホルダーを使用すると、引用符を付ける必要がなくなり (カスタム ロジックによって引き起こされる間違いを防ぐことができます) 、悪意のある SQL インジェクションの多くのケースを防ぐことができます。
1 MySQL によって選択される構文は、他の一般的な SQL 実装とは異なります。この構文は普遍的ではありません。