在PHP中使用mysql LOAD Station失败,但通过命令行操作是可行的
我有一个php网页,让一个人上传一个文件。 我想从$\文件中提取文件名,然后将所有数据加载到我的数据库中 我的代码如下所示:在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
$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文件的名称还是名称
[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…)在*.*.上授予文件或在*.*.
上授予所有权限