2015-12-22 44 views
-1

我试图将SQL查询中的行(结果)保存到csv文件中。 我正在使用数组推送为了把结果放在一个列表中。后来我把这个列表中的数据放到我的csv文件中。SQL查询中的数组推送行

我的代码:

while ($row = $query->fetch_assoc()) 
{ 
    echo sprintf($row['campaign']); 
    array_push($list, $row['campaign']); 

} 

的结果是因为有工作的sprintf。问题在于array_push的语法。我甚至尝试:

array_push($list, array(''.$row['campaign']); 

我得到一个错误:

fputcsv() expects parameter 2 to be array

完整的代码是在这里:

$list = array 
    (
     array('old_campaign_name', 'new_campaign_name') 
    ); 

// table 1 
$sql = ('select distinct(campaign) as campaign from '.$table1.''); 

// Run the query 
$query = $Db->query($sql); 

// Check for SQL errors 
if ($Db->error) 
{ 
    return ($Db->error); 
} 

// Put data in the list 

while ($row = $query->fetch_assoc()) 
{ 
    echo sprintf($row['campaign']); 
    array_push($list,$row['campaign'],''); 

} 

$fp = fopen($location, 'w'); 

foreach ($list as $fields) 
{ 
    fputcsv($fp, $fields); 
} 

fclose($fp); 
+0

你打算保存整个行,或从该行只是'campaign'价值?无论哪种方式,它看起来像你可能不需要'array_push'。只是'$ list [] = $ row;'或'$ list [] = $ row ['campaign'];'应该可以。 –

+0

我需要使用array_push。因为在我的csv文件中,我不想丢失以前的属性。我只是想添加新的。可能问题出在fputcsv上。 –

+0

为什么你的标题行有两列(旧的和新的活动名称),但你只在数据行中放一列? – Barmar

回答

1

由于错误说,fputcsv希望你把是一个数组的每一行,因此它可以在用逗号分隔的元素写出来的。 $list应该是一个2维数组,因此当您构建它时,您需要将数组推到其上。

while ($row = $query->fetch_assoc() { 
    $list[] = array($row['campaign']); 
} 

BTW,$list[] = x相当于array_push($list, x)

1

当您最初创建$list阵列,它是包含数组一个数组。但是,当您从查询结果中为其添加更多值时,您会将字符串推到末尾,而不是数组。实际上,你将作出类似

$list = array (
    array('old_campaign_name', 'new_campaign_name'), 
    'first campaign', 
    'second campaign', 
    'etc.', 
    ... 
); 

正因为如此,当你遍历$list,第一个值应与fputcsv工作,因为它是一个数组,但任何后续值将是字符串,而不是数组并会导致你所看到的错误。

你应该能够填补$list这样的:

while ($row = $query->fetch_assoc()) { 
    $list[] = $row; 
} 

$list[] = $row不会覆盖以前$list值。从the PHP documentation for array_push

Note: If you use array_push() to add one element to the array it's better to use $array[] = because in that way there is no overhead of calling a function.

+0

那么,如何将结果保存在CSV文件中而不会覆盖? –

0

它的工作原理是这样的:

while ($row = $query->fetch_assoc()) 
{ 
    // array_push($list,$row['campaign'],''); 
    array_push($list,array($row['campaign'], '')); 

}