我有一个php网页,让一个人上传文件。 我想从$ _FILE中提取文件名,然后将所有数据加载到我的数据库中。
我的代码如下所示:
$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_file
名称还是姓名?编辑1:
这是我/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:
我也按照上面提到的相同帖子尝试了local-infile = 1。 但这也不起作用。
编辑3
我试图将FILE prvil添加到用户..就像这样:
GRANT FILE ON *.* TO root;
然后当我显示root的授权时,我可以看到它被添加了。但我仍然收到一条错误消息,指出我的mysql版本不允许使用命令。 我的my.cfg文件中的infile之后是否需要“= 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代码正常工作。 谢谢!
答案 0 :(得分:1)
从MySQL 5.0升级到5.5后,我发现在PHP中创建连接时,我突然必须启用LOCAL INFILE。
使用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);