2013-07-11 51 views
-3

我正在處理動態數組,我需要在數據庫中插入這些數組。當我將動態數組插入數據庫而不是在一行中顯示其封面三行時。如何在PHP中將動態數組插入數據庫?

編碼用於插入

this is my array 

$asma[]=GA::select($ga->population,'total',3); 

這是插入查詢我需要插入細節在六個列作爲我的輸出包括六個值。

$Voltage = array(); 
    $Duration = array(); 
    $Number = array(); 

    foreach($asma as $key => $value) 
    { 

     foreach ($value as $ind => $hObject) 
     { 
      $Voltage[] = $hObject->Voltage; 
      $Duration[] = $hObject->Duration; 
      $Number[] = $hObject->Number;    

    } }// endforeach 
    for(i=0;i<row_count;i++) 
    { 


    $q = "INSERT INTO ga (fe, fe1, fe2,fe3,fe4,fe5,fe6,f7,f8, timestamp,username) VALUES (%d, %d, %d,%d, %d, %d,%d, %d, %d, '%s' ,'$login_session')"; 
    $qs = sprintf($q, $Voltage[$i],$Duration[$i],$Number[$i], 

         date("Y-m-d H:i:s")); 
    $result = mysql_query($qs); 
    if (! $result) { 
     die('Insert failed ' . mysql_errno() . ' ' . mysql_error());     
    }}} 
?> 

我需要存儲在one六個連勝值,如果用戶從選項1。如果用戶從選項中選擇two,則two行將覆蓋數據庫中。 這裏是我的輸出

Array 
(
    [0] => H Object 
     (
      [Voltage] => 18 
      [Number] => 1 
      [Duration] => 6 
     ) 

    [1] => H Object 
     (
      [Voltage] => 38 
      [Number] => 4 
      [Duration] => 14 
     ) 

    [2] => H Object 
     (
      [Voltage] => 38 
      [Number] => 4 
      [Duration] => 14 
     ) 

是店這樣

Volatge  Duration Number Volatge Duration Number Volatge Duration  Number 
18   6  1  18  6  1  18  6  1 
38   14  4  38  14  4  38  14  4 
38   14  4  38  14  4  38  14  4 

我需要存儲這樣的

Volatge  Duration Number Volatge Duration Number Volatge Duration  Number 
    18   6  1  38  4  14  38  14    4 

plz幫助我在這個

+0

列名不能可能是重複的,並嘗試豎直存放 – Sundar

+0

列名不重複的數據庫我需要它水平在數據庫中的列名是從fe,fe1,fe2,fe3,fe4,fe5,fe6,f7,f8 – ashy1234

+0

@Sundar幫助我thsi – ashy1234

回答

0

數據庫時,需要將您的查詢移出foreach循環。下面是做這件事 -

$Voltage = array(); 
$Duration = array(); 
$Number = array(); 

foreach($asma as $key => $value) 
{ 

    foreach ($value as $ind => $hObject) { 
     $Voltage[] = $hObject->Voltage; 
     $Duration[] = $hObject->Duration; 
     $Number[] = $hObject->Number;    , 
    } 

} // endforeach 
$q = "INSERT INTO ga (fe, fe1, fe2,fe3,fe4,fe5,fe6,f7,f8, timestamp,username) VALUES (%d, %d, %d,%d, %d, %d,%d, %d, %d, '%s' ,'$login_session')"; 
$qs = sprintf($q, $Voltage[0],$Duration[0],$Number[0], 
        $Voltage[1],$Duration[1],$Number[1], 
        $Voltage[2],$Duration[2],$Number[2], 
        date("Y-m-d H:i:s")); 
$result = mysql_query($qs); 
if (! $result) { 
    die('Insert failed ' . mysql_errno() . ' ' . mysql_error());     
} 

編輯

添加第二行,你可以把它改成像這樣(注意,我沒有看到你在哪裏定義選擇1/2,所以我只是把$user_select) -

$Voltage = array(); 
$Duration = array(); 
$Number = array(); 

foreach($asma as $key => $value) 
{ 

    foreach ($value as $ind => $hObject) { 
     $Voltage[] = $hObject->Voltage; 
     $Duration[] = $hObject->Duration; 
     $Number[] = $hObject->Number;    , 
    } 

} // endforeach 
$q = "INSERT INTO ga (fe, fe1, fe2,fe3,fe4,fe5,fe6,f7,f8, timestamp,username) VALUES (%d, %d, %d,%d, %d, %d,%d, %d, %d, '%s' ,'$login_session')"; 
$qs = sprintf($q, $Voltage[0],$Duration[0],$Number[0], 
        $Voltage[1],$Duration[1],$Number[1], 
        $Voltage[2],$Duration[2],$Number[2], 
        date("Y-m-d H:i:s")); 
if($user_select==2){ // if user select 2 
    $q = ", (%d, %d, %d,%d, %d, %d,%d, %d, %d, '%s' ,'$login_session')"; 
    $qs = sprintf($qs.$q, $Voltage[3],$Duration[3],$Number[3], 
          $Voltage[4],$Duration[4],$Number[4], 
          $Voltage[5],$Duration[5],$Number[5], 
          date("Y-m-d H:i:s")); 
} 
$result = mysql_query($qs); 
if (! $result) { 
    die('Insert failed ' . mysql_errno() . ' ' . mysql_error());     
} 

編輯#2
這裏是另一個版本。您的for循環無效php for(i=0;i<row_count;i++)。每個應該有一個$ - for($i=0;$i<$row_count;$i++)。另外,您的sprintf的變量數量不正確。在你的$q你有9 %d,但在$qs你只給3。你期望其他6來自哪裏。在此我已經改變了你循環以3比增加 - for($i=0;$i<$row_count;$i+=3),並用$Voltage[$i+1], $Duration[$i+1], $Number[$i+1], $Voltage[$i+2], $Duration[$i+2], $Number[$i+2],填寫其餘6 %d小號

$Voltage = array(); 
$Duration = array(); 
$Number = array(); 

foreach($asma as $key => $value) 
{ 

    foreach ($value as $ind => $hObject) 
    { 
     $Voltage[] = $hObject->Voltage; 
     $Duration[] = $hObject->Duration; 
     $Number[] = $hObject->Number;    

} }// endforeach 
for($i=0;$i<$row_count;$i+=3) 
{ 

    $q = "INSERT INTO ga (fe, fe1, fe2,fe3,fe4,fe5,fe6,f7,f8, timestamp,username) VALUES (%d, %d, %d,%d, %d, %d,%d, %d, %d, '%s' ,'$login_session')"; 
    $qs = sprintf($q, $Voltage[$i],$Duration[$i],$Number[$i], 
        $Voltage[$i+1],$Duration[$i+1],$Number[$i+1], 
        $Voltage[$i+2],$Duration[$i+3],$Number[$i+3], 

        date("Y-m-d H:i:s")); 
    $result = mysql_query($qs); 
    if (! $result) { 
    die('Insert failed ' . mysql_errno() . ' ' . mysql_error());     
}}} 
?> 
+0

當用戶從輸入中選擇一個可用時,這種方式在一種輸入方式下很好地工作,但是如果用戶從輸入中選擇兩個,那麼數據庫中的兩行具有相同的數據 – ashy1234

+0

我假定您能夠弄清楚如何添加第二行。給我幾分鐘,我會回來給你舉個例子。 – Sean

+0

我編輯瞭如何添加第二行,如果用戶選擇2 – Sean

0
<?php 
//code not tested check it 

//Logic is changed instead of for looping many times 
$data = array(); 

$j = 0; 

foreach($asma as $key => $value) 
{ 
$i = 0; 

foreach ($value as $ind => $hObject) 
{ 
    if($i==0) 
    { 
     $data[$j]['fe'] = mysql_escape_string($hObject->Voltage); 

    }else{ 

     $data[$j]['fe'.$i] = mysql_escape_string($hObject->Voltage); 
    } 

    $i++; 

    $data[$j]['fe'.$i] = mysql_escape_string($hObject->Duration); 
    $i++; 

    $data[$j]['fe'.$i] = mysql_escape_string($hObject->Number); 
    $i++; 

} 

$j++; 

}// endforeach 

//multiple array 
foreach($data as $array) 
{ 


//unique array 
//$array3 = array_merge($Voltage,$Duration,$Number); 

$fields = implode(',',array_keys($array)); 

//if you want append any new field append it 
$fields .= ','.'timestamp,username'; 

$vals = "'".implode("','",array_values($array))."'"; 

//if you want append any new values append it 
$vals .= ",'".time()."','".$login_session."'"; 


$q = "INSERT INTO ga (".$fields.") VALUES(".$vals.")"; 

$result = mysql_query($q); 
if (! $result) { 
    die('Insert failed ' . mysql_errno() . ' ' . mysql_error()); 
} 
} 
+0

嘗試使用mysqli擴展而不是mysql – Sundar

+0

它的唯一插入1個輸入值不是其他意思如果用戶選擇2則數據庫中只插入一行而不是一個n現在時間戳不會根據會話現在 – ashy1234

+0

邏輯被更改爲處理多個數組值.. – Sundar