此MySQL版本不允许使用used命令

时间:2015-02-16 21:49:19

标签: php mysql load-data-infile

好吧,经过一周的尝试,我发现没有成功的所有不同的想法答案,我会问。这是针对MySQL的LOAD DATA LOCAL INFILE。有很多相关的帖子,但我仍然无法从Web浏览器中获取它,但是能够从服务器上的mysql命令提示符运行它,使用相同的用户并传递连接到同一个数据库。到目前为止我尝试了什么

  1. MySQL版本5.5
  2. Ubuntu 12.04
  3. PHP version 5.3
  4. 在my.cnf中 local-infile=1 在mysqld,mysql,mysql-safe中 loose-local-infile=1客户

    重新启动MySQL服务器。此时,我可以从命令提示符运行查询,而以前没有。 我已经给出了从777访问中提取文件的目录。 我已经确认php.ini已启用本地文件参数。 我更新了apparmor。 实际查询:

    LOAD DATA LOCAL INFILE '/var/www/ui/uploads/r_import.csv' INTO TABLE r_data FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS (first_name,last_name,apt,user_id)
    

    以上查询在mysql命令中起作用,在与服务器的连接中没有特殊参数。

    如果有人对此有任何想法,我会很乐意尝试任何事情...... 提前谢谢。

    <?php
    include 'includes/header.php';
    if($_FILES['file']['type'] != "application/vnd.ms-excel"){
       die("This is not a CSV file.");
    }
    elseif(is_uploaded_file($_FILES['file']['tmp_name'])){
        $filename = $_FILES['file']['tmp_name'];
        $name = $_FILES['file']['name'];
        copy( $filename, 'uploads/'.$name ) or die( "Could not copy file!");
        $file_to_import = '/var/www/ui/uploads/'.$name;
       $query = 'LOAD DATA LOCAL INFILE  \''.$file_to_import.'\' INTO TABLE r_data FIELDS TERMINATED BY  \',\' ENCLOSED BY  \'"\' LINES TERMINATED BY  \'\n\' IGNORE 1 ROWS (first_name,last_name,apt,user_id)';
       echo $query;
       $result = mysqli_query($link,$query) or die(mysqli_error($link));
    }
    else{
       die("You shouldn't be here");
    }
    ?>
    

2 个答案:

答案 0 :(得分:1)

$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($link, 'localhost', $username, $password, $database);

数据库的连接字符串对我有用。我在developerwjk给出的链接的最后一条评论中找到了它。

答案 1 :(得分:0)

您的问题是使用LOCAL关键字。当您使用LOCAL时,服务器希望MySQL客户端读取文件并发送它。当客户端软件在远程计算机上运行时,或者当您在服务器上运行MySQL客户端时,这适用。 (这就是您可以从服务器命令行运行查询的原因。)

如果您正在运行PHP,则不涉及客户端软件。 PHP直接调用服务器,因此LOCAL关键字在此上下文中无效。

要从PHP使用LOAD DATA INFILE,您必须确保该文件位于MySQL服务器具有读取权限的服务器文件系统中的位置,并且该路径指向该文件作为查询的一部分传递。请勿使用LOCAL关键字。

如果您尝试从远程客户端加载文件,则需要先将文件上传到文件系统,然后执行查询。

请注意MySQL手册中的这句话:如果指定了LOCAL,则客户端主机上的客户端程序将读取该文件并将其发送到服务器。

参考:http://dev.mysql.com/doc/refman/5.5/en/load-data.html