use skysql
delimiter $$
drop procedure if exists LoadData $$
CREATE PROCEDURE LoadData (IN File VARCHAR(100),IN TableName VARCHAR(100))
BEGIN SET @Cmd =CONCAT("LOAD DATA INFILE ",File," INTO TABLE ",TableName," FIELDS TERMINATED BY ',' LINES TERMINATED BY ';';");
SELECT @Cmd;
PREPARE stmt FROM @Cmd;
EXECUTE stmt;
END;
$$
delimiter ;上面这个代码,报警
this command is not supported in the prepared statement protocol yet.这条路不行,我该怎么实现我想要的功能?

解决方案 »

  1.   

    这条语句不能在预处理中实现。
    原因:必须有FILE权限,不安全。
      

  2.   

    这个我了解了如果我要在外部程序控制导入数据,那是不是直接写load data infile格式呢?我看了mysqlimport形式,导入表名和文件名要相同,不太符合要求
      

  3.   


    mysqlimport是load data infile 的命令行模式!至于表名和文件名你应该搞成一样的先,然后再考虑否和你的要求!
      

  4.   


    我是多个文件导入到一个表,不能用mysqlimport萨。看来只能直接用load data infile了
      

  5.   


    那你就建多个相同的表,导入后,再执行 insert ... select ...不就可以了。
      

  6.   

    http://www.yesky.com/imagesnew/software/mysql/manual_Privilege_system.html
    多看看这个.
      

  7.   

    LOCAL will work only if your server and your client both have been enabled to allow it. For example, if mysqld was started with --local-infile=0, LOCAL will not work.
    解决的办法是:
    在Linux里运行mysql -u -p --local-infile=1