在PHP中使用mysql LOAD Station失败,但通过命令行操作是可行的

在PHP中使用mysql LOAD Station失败,但通过命令行操作是可行的,php,mysql,Php,Mysql,我有一个php网页,让一个人上传一个文件。 我想从$\文件中提取文件名,然后将所有数据加载到我的数据库中 我的代码如下所示: $myfile = $_FILE['file']['tmp_file']; $executebatchloadsql = 'LOAD DATA LOCAL INFILE "'. $myfile .'" INTO TABLE testtable (fname, lname); mysql_query($executebatchloadsql) or

我有一个php网页,让一个人上传一个文件。 我想从$\文件中提取文件名,然后将所有数据加载到我的数据库中

我的代码如下所示:

 $myfile = $_FILE['file']['tmp_file'];
 $executebatchloadsql = 'LOAD DATA LOCAL INFILE "'. $myfile .'" INTO TABLE testtable (fname, lname);
 mysql_query($executebatchloadsql) or die(mysql_error());
但我收到的错误信息是:

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

我的问题如下

  • 我应该使用
    tmp\u文件的名称还是名称
  • 要使load data命令正常工作,我需要做什么?我试着跟随在上找到的帖子,但它仍然给我同样的错误
  • 编辑1:

    这就是my/etc/mysql/my.cnf的部分外观:

    [mysqld]
    
    user            = mysql
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    port            = 3306
    basedir         = /usr
    datadir         = /var/lib/mysql
    tmpdir          = /tmp
    lc-messages-dir = /usr/share/mysql
    skip-external-locking
    local-infile
    
    最后一行是我添加的内容。我还在[mysql]部分添加了相同的行:

    [mysql]
    local-infile
    
    进行这些更改后,我重新启动了sql:

    /etc/init.d/mysql restart
    
    但我还是有问题

    编辑2:

    我也试过根据我上面提到的同一篇文章使用localinfle=1。 但这也不行

    编辑3

    我已尝试将文件prvil添加到用户。。像这样:

    GRANT FILE ON *.* TO root;
    
    然后,当我展示它为root授权时,我可以看到它被添加了。但我仍然收到一条错误消息,在我的mysql版本中不允许使用该命令。 我是否需要在my.cfg文件中的infle后面加“=1”

    编辑4:

    作为进一步的测试,我尝试通过命令行手动加载文件,而不是通过php加载,它接受了。我以root身份登录(这与我正在使用我的应用程序进行测试的id相同),然后我尝试了以下命令:

    mysql> load data local infile '/var/www/testwebsite/abc.csv' into table testtable;
    Query OK, 3 rows affected, 48 warnings (0.00 sec)
    Records: 3  Deleted: 0  Skipped: 0  Warnings: 48
    
    但我似乎无法让PHP代码正常工作。
    谢谢

    从MySQL 5.0升级到5.5之后,我发现在PHP中创建连接时,我突然需要专门启用本地内嵌

    使用mysql:

    mysql_connect(server,user,code,false,128); // 128 enables LOCAL INFILE
    mysql_select_db(database);
    
    使用mysqli:

    $conn = mysqli_init();
    mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true);
    mysqli_real_connect($conn,server,user,code,database);
    

    您使用的是哪个版本的mysql,您使用的是mysql、mysqli还是pdo?您的服务器是否允许
    加载数据
    ,并且是否配置为这样做?确保您的mysql用户已被授予
    文件
    权限。如果您使用共享主机,您的主机提供商也可能阻止您执行此命令。请参阅问题2旁边的我的更新评论。另外,mysql版本是5.5.28。另外,我使用的是mysql_connect(),我猜这意味着我没有使用mysqli或pdo…正如Jamie建议的exec命令
    SHOW GRANTS FOR username
    并查看用户是否已使用
    mysql
    或您使用的任何IDE(phpAdmin,Sequel Pro…)在*.*.
    上授予文件或
    在*.*.
    上授予所有权限