3

PHPスクリプトから生成された大量のデータがあり、データベースに挿入する必要があります。さまざまな解決策を試しましたが、結果は異なりますが、現在の解決策(および私が最善だと思う解決策)は、データをCSVファイルに生成し、次のクエリを使用してデータベースに挿入することです。

LOAD DATA LOCAL INFILE 'myfile.csv' INTO TABLE t1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY "'"

PHPフレームワークとしてCodeIgniterを使用していますが、クエリが実行された後、エラーページにリダイレクトされます。

データベースエラーが発生しました

エラー番号:0

エラーメッセージなどはありません。

私はコードをステップスルーしましたが、私が見つけることができるのは、mysqli_query()falseを返し、後でmysqli_errno()0をmysqli_error()返し、空の文字列を返すことだけです。

ただし、クエリは実際に成功しており、データベースを調べると、CSVファイルのすべてのデータが正常に挿入されていることがわかります。この動作は予想されるものですか?もしそうなら、私はCodeIgniterコードを少しハックするかmysqli_query()、フレームワークを経由せずに直接呼び出す必要があると思います。

MySQL Workbenchでもまったく同じクエリを実行しましたが、エラーメッセージは表示されません。

4

2 に答える 2

2

データベースに接続していないことに気付いたとき、まったく同じ問題が発生しました。

を呼び出しrequire_once('connect.php')ていましたが、このコードで を使用したのは 2 回目だったrequire_onceので、PHP は接続をプルしませんでした。

を require に変更するrequire_onceと、この問題が修正されました。

于 2011-05-22T23:04:55.163 に答える
0

私はLOAD INFILE以前にphpから試したことはありませんでしたが、簡単なグーグルで関数mysqli_set_local_infile_handler()を思いつきました。おそらく例/コメントが役立つでしょうか?

編集:私の理論では、クエリは多数の行の戻り値を期待しており、接続は数値を返していません。そのため、クエリは MySQL 側で成功しますが、PHP は数値 > 0 を期待しますが、取得しません。したがって、エラーメッセージなしで失敗を報告します。

infile_handler は、挿入された行数を返します。

于 2011-01-13T15:11:14.647 に答える