2011-09-13 6 views
0

私はLOAD DATA INFILEを試行しており、上記のエラーが発生しています。'フィールドリスト'の 'date_added'列が不明です

LOAD DATA INFILE '$file' 
REPLACE INTO TABLE $custom_parts 
FIELDS TERMINATED BY ',' ESCAPED BY '\\\\' 
LINES TERMINATED BY '\\r\\n' 
IGNORE 1 LINES 
(`partsno`, `mfg`, `cond`, `price`, `is_deleted`, @date_added) 
    SET `date_added` = STR_TO_DATE(@date_added, '%c/%e/%Y'), 
    `prtky` = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(partsno, ' ', '') 
    , '\\\\', '') , '/', '') , '_', '') , '.', '') , '-', '') 

ファイルの列は、私はこれをロードするためにPHPを実行するたびに、私はエラーを取得する

Part Number,MFR,Condition,price,is_deleted,date_added 

です。私はなぜこれが起こっているのかと魅了されています。私はそれが割り当てられていないユーザー変数の問題であると私は確信を探していますと考えています。

答えて

0

私は自分の質問に答えました。 ----ユーザー変数は、式が許可されているほとんどのコンテキストで使用できます。これには現在、SELECTステートメントのLIMIT句やLOAD DATAステートメントのIGNORE N LINES句など、リテラル値が明示的に必要なコンテキストは含まれていません。

0

このデータを読み込んでいるテーブル($ custom_parts)に 'date_added'という列がありますか?

+0

絶対に。タイプ=日付 –

+0

多分( 'partsno'、' mfg'、 'cond'、' price'、 'is_deleted'、@date_added)を(' partsno'、 'mfg'、' cond'、 'price'、' is_deleted '、' date_added')フィールドリストに?パラメータ(remove @ symbol)を使用する代わりに? – joelbyler

+0

これは、str_to_date関数にロードされた変数を使用できるようにするユーザー変数を削除します。 DBに配置する前に、date_addedカラムを2011年9月13日から変換する必要があります。 –

0

動的テーブル名に変数を使用することはできません。
あなただけの、プリペアドステートメントを使用して、

しかし
あなたは、ストアドプロシージャ内load data infileを使用することはできませんし、私はあなたがいずれかのプリペアドステートメントで使用することができますかわからないが、これを行うことができます。

あなたが

  1. は、クエリを構築する前に変数を解決することができます(どのようなPHP、パスカル、)より高いレベルのプログラムからMySQLを使用している場合は、
  2. SQLインジェクションを防ぐために、列名をホワイトリストと照合してください。
  3. 拡張MySQLにフィードを送ります。あなたが`バッククォートを使用してそれらをエスケープし、動的なテーブル名を使用している場合、また、How to prevent SQL injection with dynamic tablenames?

は、サンプルコードについては、この質問を参照してください。これにより、テーブル名に面白い文字が含まれている場合や予約語の場合にMySQLが爆破されることを防ぎます。

+0

テーブルは動的ではありません。これはPHPファイルの準備文です。ステートメントは、私はユーザー変数から離れて列を要求する場合はうまく動作しますが、私はstr_to_date部分の変数が必要です、そして、mysqlは可能ですhttp://dev.mysql.com/doc/refman/5.1/en/ load-data.html –

+0

私自身の質問に答えました。 ----ユーザー変数は、式が許可されているほとんどのコンテキストで使用できます。これには現在、SELECTステートメントのLIMIT句やLOAD DATAステートメントのIGNORE N LINES句など、リテラル値が明示的に必要なコンテキストは含まれていません。 –

関連する問題