2

我想插入一个 HTML 文件,它有很多我不想手动转义的 SQL 元字符(例如单引号)到 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 回答