私は、人がファイルをアップロードできるようにするphpWebページを持っています。$ _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バージョンでは許可されていません
私の質問は次のとおりです
tmp_file
名前を使うのか、それとも名前を使うのか?- load dataコマンドを機能させるには何をする必要がありますか?MySQLで見つかった投稿をフォローしようとしました:LOAD DATA LOCAL INFILEを有効にしますが、それでも同じエラーが発生します。
編集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
FILEprvilをユーザーに追加しようとしました。次のようになります。
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コードを機能させることができないようです。ありがとう。!