2016-06-28 12 views
-3

を使用してデータベースにレコードを挿入する方法:私はPLANTとコストセンターに応じて、多くのレコードを追加したいが、私は私だけが異なる植物とコストセンターを提出しても、12件のレコードを持っこれは私のコードでループ

[G_TEST_CC] = {COST_CENTER}; 
[G_TEST_PLANT] = {PLANT}; 
header("Location: ../83211_TEST_PM_MONTH/83211_TEST_PM_MONTH.php"); 

$MONTH = array(); 

$MONTH[ 1 ] = 'JAN'; 
$MONTH[ 2 ] = 'FEB'; 
$MONTH[ 3 ] = 'MAR'; 
$MONTH[ 4 ] = 'APR'; 
$MONTH[ 5 ] = 'MAY'; 
$MONTH[ 6 ] = 'JUN'; 
$MONTH[ 7 ] = 'JUL'; 
$MONTH[ 8 ] = 'AUG'; 
$MONTH[ 9 ] = 'SEP'; 
$MONTH[ 10 ] = 'OCT'; 
$MONTH[ 11 ] = 'NOV'; 
$MONTH[ 12 ] = 'DEC'; 


for($i = 1; $i<=12 ; $i++){ 


sc_lookup(dataset, "select max(ID) from CMS.SUM_TEST"); 

$MAXID = {dataset[0][0]}; 
$NEWMAXID = $MAXID + $i; 


// SQL statement parameters 
$insert_table = 'EXPENSE_TEST_PM';  // Table name 
$insert_fields = array( // Field list, add as many as needed 
    'ID' => "'$NEWMAXID'", 
    'BUDGET_YEAR' => "'[GLOBAL_BUDGETYEAR]'", 
    'VERSION' => "'[GLOBAL_VERSION]'", 
    'PLANT' => "'[G_TEST_PLANT]'", 
    'COST_CENTER' => "'[G_TEST_CC]'", 
    'MONTH' => "'$MONTH[$i]'", 
); 

// Insert record 
$insert_sql = 'INSERT INTO ' . $insert_table 
    . ' (' . implode(', ', array_keys($insert_fields)) . ')' 
    . ' VALUES (' . implode(', ', array_values($insert_fields)) . ')'; 

sc_exec_sql($insert_sql); 

} 

この画像は、問題を理解するのに役立つことがあります。Dipanwitaクンドゥが言ったように Choosing PLANT and COST CENTER EXPENSE_TEST_PM table

+1

はそうあなたが唯一の12のインサート –

+0

を得るI = 12まで実行されます私はPLANTとコストセンターごとに12のレコードを保存することができますどのように、わずか12ので月のを使用しましたか? – MANGAHAS

+1

文字列連結を使用して、SQLにパラメータを含めることは絶対に避けてください:代わりにパラメータを使用する(またはホワイトリスト値のエビデンスを表示しますが、それは難しい)。進行中のSQLインジェクションは恥ずかしいものです。 – Richard

答えて

0

は、あなたのループは12回の反復の後に停止します。より多くの挿入が必要な場合は、値を取得するために最初に1つまたは2つのループを追加する必要があります。 私はまた、反復処理ではなく、文字列連結を使用しない、1つの挿入要求のみを実行することをお勧めします。そのような何か:あなたのループとして

// set fields 
$fields = ['ID', 'BUDGET_YEAR', 'VERSION', 'PLANT', 'COST_CENTER', 'MONTH']; 

// set max id 
sc_lookup(dataset, "select max(ID) from CMS.SUM_TEST"); 
$id = {dataset[0][0]}; 

// set sql 
$insert_table = 'EXPENSE_TEST_PM';  // Table name 
$insert_sql = 'INSERT INTO ' . $insert_table . ' (' . implode(', ', $fields) . ') VALUES '; 

for($i = 1; $i<=12 ; $i++){ 

    // you need to add new loop(s) here to get every data from active month 
    // it depends on your variables format 
    // here I assume that your PLANT and COST_CENTER are indexed by month 
    // for (...) // loop for cost center 
     // for (...) loop for plant 
      // SQL statement parameters 
      $insert_sql .= '(' 
       . $id 
       . '{GLOBAL_BUDGETYEAR[0][0]}' 
       . '{GLOBAL_VERSION[0][0]}' 
       . '{PLANT[' . $i . '][' . $plantIndex. ']})' 
       . '{COST_CENTER[' . $i . '][' . $costCenterIndex . ']})' 
       . $i 
       . '),'; 
      $id++; 

     // } 
    // } // end new loop 
} 
// remove last "," 
$insert_sql = trim($insert_sql, ','); 

// Insert records 
sc_exec_sql($insert_sql); 
関連する問題