2012-02-08 44 views
0

我知道如何使用PHP导出为CSV来查询mySQL并填充CSV。但是,是否可以让用户选择他们想要的列并相应地更改SQL查询?如何使用PHP将变量列导出到CSV文件?

我已经建立了与数据库的连接,增加我的查询是:

$query = sprintf("SELECT x, y, z from a"); 
$result = mysql_query($query, $conn) or die(mysql_error($conn)); 
header('Content-Type: text/csv'); 
header('Content-Disposition: attachment;filename=export.csv'); 
$row = mysql_fetch_assoc($result); 
if ($row) 
{ 
echocsv(array_keys($row)); 
} 
while ($row) 
{ 
echocsv($row); 
$row = mysql_fetch_assoc($result); 
} 
function echocsv($fields) 
{ 
$separator = ''; 
foreach ($fields as $field) 
{ 
    if (preg_match('/\\r|\\n|,|"/', $field)) 
    { 
    $field = '"' . str_replace('"', '""', $field) . '"'; 
    } 
    echo $separator . $field; 
    $separator = ','; 
} 
echo "\r\n"; 
} 
+2

是的,现在没有更多的细节,这是你得到的。 – 2012-02-08 03:15:57

+0

是的,这是可能的。在这种情况下,您必须以编程方式生成特定的SQL语句。 – 2012-02-08 03:16:40

+0

如何以编程方式生成SQL语句? – codingNewbie 2012-02-08 03:25:42

回答

2

是的。您必须制作一个表单,用户可以选择他们想要导出的字段,我在复选框列表中列出您可以获得的所有可能的数据库字段,然后根据用户选择创建查询。 Ej:

<form action="" method="post"> 
    <label><input name="fields[]" type="checkbox" value="name"> Username</label> 
    <label><input name="fields[]" type="checkbox" value="birthdate"> Birthdate</label> 
</form> 

然后在服务器端创建数据库查询。

$sql = "SELECT `". implode("`, `", $_POST["fields"]) ."` FROM db_table"; 

希望得到这个帮助。

+0

当我尝试使用它时,我在fieldlist中得到了 - unknown列作者 - 错误。此外,我以前使用这种类型的查询: $ query = sprintf(“select x from y”); – codingNewbie 2012-02-08 23:55:56

+0

这不起作用:( – codingNewbie 2012-02-11 17:39:51

+0

确定它的工作原理:D:D谢谢你! – codingNewbie 2012-02-11 18:19:04