2010-04-09 162 views
1

我有一个PHP二维数组,每个都有一个值,我需要把它放到一个MySQL数据库中。

数据库有8个字段。例如。 Field1,Field2,Field3等

我试图确保value1 => field1, value2 =>field2, value3 => field3等等,当一个记录已满(即8个值后)应创建一个新的记录为接下来的8个值等等。

我知道第1,第9,第17,第26等值需要插入语句,中间值将是更新语句。PHP二维数组到MySQL数据库

这样做的最好方法是什么?

回答

2

array_chunk()是可能的答案,如果我把这个问题正确。

然后就是像这样

foreach ($chunks as $row) { 
    array_map $row with mysql_real_escape_string 
    implode to get VALUES clause 
    INSERT 
} 

真正阵列样品可以节省大量的您自己和别人的时间

说,如果你想保存的钥匙,不是值,必须先调用array_reverse。

1

最容易理解的是使用计数器。像:

$cc=0; 
while(...){ // Whatever your finished condition is 
if($cc==0){ 
    //INSERT 
}else{ 
    //UPDATE 
} 
$cc++; 
if($cc==8) $cc=0; 
} 
1
$records = array_chunk($yourArray); 

foreach($records as $record) 
{ 
    $record = array_map("mysql_real_escape_string", $record); 
    $q = 'INSERT INTO `yourTable` VALUES 
     '.$record[0].', 
     '.$record[1].', 
     '.$record[2].', 
     '.$record[3].', 
     '.$record[4].', 
     '.$record[5].', 
     '.$record[6].', 
     '.$record[7].', 
    '; 
    $res = mysql_query($q); 
} 
0

我有一个PHP二维数组,许多键,每个键一个值,我需要把这个变成一个MySQL数据库。

听起来很奇怪 - PHP不会做二维数组。只有嵌套的数组。

我知道1号,9号,17号,26号值等,都需要一个INSERT语句

我相信这意味着你没有一个二维数组 - 你有映射到非嵌套PHP阵列的2D数据集....在这种情况下:

for ($x=0; $x<count($data)/8; $x+=8) { 
    $qry="INSERT INTO sometable (f1, f2, f3,f4,f5,f6,f7,f8) VALUES ("; 
    $join=''; 
    for ($y=0; $y<8; $y++) { 
     $qry.=$join . prep_val($data[$x+$y]); 
     $join=','; 
    } 
    mysql_query($qry); 
} 

(其中prep_val enloses字符串和逸出元字符)

C.

0

我认为你应该保留最后一个插入行的db id,以及这一行中有多少个字段是空闲的。

这应该允许您在将新数据放入数据库时​​进行适当的更新和/或插入。

对于将阵列拆分成部件,您可以使用array_slice()array_splice()array_chunk()函数。