来自客户端的mysql load_file

时间:2013-06-10 09:47:39

标签: mysql mysql-loadfile

我想插入一个HTML文件,其中包含许多我不想手动转义的SQL元字符(例如单引号)到MySQL表中。

我虽然可以让mysql客户端将文件内容加载到变量中,然后简单地插入该变量,这些内容如下:

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

然而,the documentation of load_file says,它将文件加载到服务器上,而不是客户端上。这对我不起作用。

因此我的问题:如何让mysql客户端将文件加载到变量中?

注意:These do not apply,因为他们提到load_file只能在服务器上运行。我知道。

3 个答案:

答案 0 :(得分: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

但请注意Security Issues with LOAD DATA LOCAL

答案 1 :(得分: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'作为现场终止者。

答案 2 :(得分: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
   ...