0

私は、人がファイルをアップロードできるようにする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バージョンでは許可されていません

私の質問は次のとおりです

  1. tmp_file名前を使うのか、それとも名前を使うのか?
  2. 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コードを機能させることができないようです。ありがとう。!

4

1 に答える 1