2017-08-16 4 views
0

私は必要なデータを解析するXML API応答を取得していますが、後でadd'lデータを使用するために完全なXML応答をMySQLに保存したいと考えています。XMLをMySQLに保存する最良の方法

XMLをBLOBに格納していましたが、値の中に特殊文字があるとINSERTが破損することがありました。

したがって、最初にhtmlentitiesを持つXMLをBLOBに変換し、元のAPI応答データの整合性を維持します。これは良い方法ですか、それとも良い方法がありますか?

+0

投稿を編集して、あなたのテーブルにあなたのxmlを 'INSERT 'するコードを表示できますか? XMLテキストを正しくエスケープしなかった可能性があります。さらに、XMLはCLOB( 'text'データ型)に入ります。ベース64エンコーディングは正常に動作しますが、データは少し肥大化します。 –

+0

もちろん、準備済みのステートメントとバインド変数を使用しています。これは、SQLを「壊す」という多くの問題を解決します。 –

答えて

0

INSERTedBLOBにすると、すべてのデータを正しくエスケープできます。 htmlentitiesではなく、です。 mysqli APIの場合は、mysqli :: real_escape_stringを使用します。 PDO用のバインディング。

Windowsで実行している場合は、データをバイナリモードで取得してください。そうでない場合は、読み取り中にCR/LFが「固定」になることがあります。

理論ではXMLはUTF-8である必要があります。TEXT CHARACTER SET utf8mb4に入れると、BLOBの代わりに機能するはずです。

その他すべてが失敗した場合は、blobをBase64に(クライアントで)変換することを検討してください。それは4/3大きくなります。

関連する問題