2012-05-18 15 views
6

私は、webappの中核となるコードチャンクを完成させるMySQL初心者です。コードはCSVファイル(ローカル)をインポートします。これはFileMakerによって生成され、クリーンアップされ、そのまま残されます。LOAD DATA LOCAL INFILEをエラーキャッチする最も良い方法は?

これは、ある時点ですぐに(そしておそらく500MB未満のデータベースになります)、私は道路上の問題を防ぐために行うことができるより良いエラーチェック/キャッチがあるかどうかを知りたいと考えています私のサーバー設定に警告することができます。私は一時ログなどについて読んだことがあります。私のMySQL管理はまだ嗅ぎどころではありません。

非常に基本的なコードは次のとおりです。

$m = mysql_connect('localhost', 'mytable', 'mypassword'); 
$db = 'mydb'; 
mysql_select_db($db) or die("Import Error - Couldn't select database: " . mysql_error()); 

$sql = 'load data local infile "inventory.csv" 
     into table ibl_account_details_temp fields terminated by "," 
     optionally enclosed by "\"" 
     lines terminated by "\r" 
     (store_id, SKU, account, item_number, brand, description, size, category, price, qty, fees) 
     '; 

echo mysql_query($sql) or die(myqsl_error()); 

PSの編集:私はまた、インポートのこのメソッドはSQLインジェクションに開いているかどうかを知るのが大好きですか?

+0

MySQLがCSVファイルの内容を実行していないので、「LOAD DATA INFILE」を実行することで、最初にSQLインジェクションが発生する可能性はありません。単にCSVとして解析するだけです。もちろん、二次攻撃のリスクについては何も言及していませんが、入力を受け取るすべてのクエリ(クエリ結果からの入力を含む)がパラメータ化を使用する限り、安全でなければなりません。 mysql_ *関数の代わりにmysqlにアクセスするには、mysqliまたはPDOを使用する必要があります。 –

+0

私は以前の単純なinsert文を使用していましたが、fgetcsvは18MBのファイルでメモリ不足になりました。私はそれを解決することができず、128MBのRAMでホストによって最大限にされ、この作業を取得/維持する必要があります。それは、私がPDOを使用している他のすべての場所、----- – SWL

+0

確かに、私はCSVをインポートするために 'LOAD DATA INFILE'を使用することに異論はありません。 –

答えて

4

残念ながら、ロードデータのinfileによるエラー処理は非常に貧弱です。私はほとんど毎日それを使用しています。そして、何らかの一時テーブルにインポートし、インポートされたものを検証するためにPHPとMySQLの組み合わせを使用するのは簡単なルーチンになりました。これは余分な作業だと主張することができますが、「エラー」が何であるかを完全に制御できるという利点があります。簡単に言えば、できるだけ効率の良い生データを取得し、PHPスクリプトでエラーチェックと検証のルールを作成します。

+0

迅速な対応をありがとう。私のエラーチェックはFileMakerで行われており、かなり厳しいので、そこでは安全だと感じています。このルートがbtwのSQLインジェクションの可能性はありますか? – SWL

+0

私はあなたのデータがどこから来ているのかわからないので、確かに言うことはできませんが、それは通常はユーザ入力の問題です。おそらくそうではありません。その後、完成した製品の安全性について、FileMakerで行うスクラビングに戻ります。 – GDP

関連する問題