php
  • oracle
  • 2016-06-28 5 views -3 likes 
    -3

    Это мой код:Как вставить запись в базу данных с помощью цикла

    [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); 
    
    } 
    

    Я хочу добавить много записей в зависимости от ЗАВОДА и МВЗ, но я получил только 12 записей, даже если я представить другое растение и МВЗ ,

    Это изображение может помочь понять проблему: Choosing PLANT and COST CENTER EXPENSE_TEST_PM table

    +1

    Как ваш цикл будет работать до я = 12, так что вы получите только 12 вставки –

    +0

    я использовал только 12 из месяца Как я сэкономил 12 запись на растение и МВЗ? – MANGAHAS

    +1

    НИКОГДА не используйте конкатенацию строк для включения параметров в SQL: вместо этого используйте параметры (или покажите доказательства значений белого списка, но это сложнее сделать). Продолжающееся внедрение SQL Injection неловко. – Richard

    ответ

    0

    Как сказала Dipanwita Кунда, ваш цикл остановится после 12 итераций. Если вам нужно больше вставок, вам, вероятно, нужно добавить одну или две петли внутри первой, чтобы получить ваши значения. Я также рекомендую вам выполнить только один запрос на вставку, а не по итерации, а также не использовать конкатенацию строк. Нечто подобное:

    // 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); 
    
    Смежные вопросы