2

手動でエスケープしたくない多くの SQL メタ文字 (一重引用符など) を含む HTML ファイルを MySQL テーブルに挿入したいと考えています。

私は、mysql クライアントにファイルの内容を変数にロードさせ、その変数を単純に挿入することができました。

set @result_text = load_file('/tmp/results.html');
INSERT INTO election_results (election_id, result) VALUES (17, @result_text);

ただし、load_file のドキュメントには、クライアントではなくサーバーにファイルをロードすると書かれています。そして、それは私にはうまくいきません。

したがって、私の質問: mysql クライアントがファイルを変数にロードする方法は?

注意:これら は、load_file がサーバー上でのみ機能することに言及しているため、ここでは適用されません。 私が知っています。

4

3 に答える 3

1

次のキーワードを使用して、MySQL のLOAD DATAコマンドを使用します。LOCAL

LOAD DATA LOCAL INFILE '/tmp/results.html'
    INTO TABLE election_results
    FIELDS
        TERMINATED BY ''
        ESCAPED BY ''
    LINES
        TERMINATED BY ''
    (result)
    SET election_id = 17

ただし、セキュリティの問題にLOAD DATA LOCAL注意してください。

于 2013-06-10T09:53:35.637 に答える
0

次を使用して、そのエラー 1084 を渡しました。

LOAD DATA LOCAL INFILE '/tmp/results.html'
INTO TABLE election_results
FIELDS
    TERMINATED BY '\Z'
    ESCAPED BY ''
LINES
    TERMINATED BY ''
(result)
SET election_id = 17

フィールド ターミネータとして '\Z' に注意してください。

于 2013-08-20T03:56:45.970 に答える
0

正確には load_file ではありませんが、私の場合は正常に動作します。

このワンライナーを検討してください(注、私はUbuntuを使用しています):

printf "$(cat update_xml.sql)" "$(cat my.xml | sed s/"'"/"\\\'"/g)" | mysql -h myRemoteHost -u me -p***

update_xml.sql には次のものがあります。

UPDATE
   myTable
SET
   myXmlColumn = '%s'
WHERE
   ...
于 2013-12-26T19:33:35.687 に答える