Php 如何在MySQL中创建一个临时表,将表数据作为CSV文件输出?

Php 如何在MySQL中创建一个临时表,将表数据作为CSV文件输出?,php,mysql,csv,temp-tables,Php,Mysql,Csv,Temp Tables,我有一个从数据库表创建CSV文件的脚本,除了输出表中的所有数据外,它工作正常,我需要它只输出当前登录用户的数据。我正在开发的应用程序是为了让用户能够存储他们已经读过、想要读过的书的列表,并且我希望允许他们下载他们可以导入Excel的书的列表。(考虑到还有OpenOffice等以及MS Excel,CSV文件是最好的选择吗?) 我发现我需要创建一个临时表来使用select查询只选择属于当前登录用户的记录。我可以使用访问当前用户的数据,其中username='$session->username'

我有一个从数据库表创建CSV文件的脚本,除了输出表中的所有数据外,它工作正常,我需要它只输出当前登录用户的数据。我正在开发的应用程序是为了让用户能够存储他们已经读过、想要读过的书的列表,并且我希望允许他们下载他们可以导入Excel的书的列表。(考虑到还有OpenOffice等以及MS Excel,CSV文件是最好的选择吗?)

我发现我需要创建一个临时表来使用select查询只选择属于当前登录用户的记录。我可以使用
访问当前用户的数据,其中username='$session->username'

我原以为在尝试运行输出数据以用于CSV文件的查询之前创建临时表会很容易,然后再删除该表,但我已经使用在CSV文件之前创建的临时表再次尝试了CSV创建代码,同样,生成的CSV文件包括所有用户的所有记录

有一个配置文件可以设置数据库连接属性,还可以设置用于创建文件的表,如变量
$table
,我已经将其设置为我尝试创建的临时表的名称

这是我得到的代码:

<?
$link = mysql_connect($host, $user, $pass) or die("Cannot connect to the database." . mysql_error());
mysql_select_db($db) or die("Can not connect.");

$temp = mysql_query("CREATE TEMPORARY TABLE books_temp SELECT * FROM books WHERE username='$session->username'");
$tempresult = mysql_query($temp);

$result = mysql_query("SHOW COLUMNS FROM ".$table."");
$i = 0;
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$csv_output .= $row['Field']."; ";
$i++;
}
}
$csv_output .= "\n";

$values = mysql_query("SELECT * FROM ".$table."");
while ($rowr = mysql_fetch_row($values)) {
for ($j=0;$j<$i;$j++) {
$csv_output .= $rowr[$j]."; ";
}
$csv_output .= "\n";
}

$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("d-m-Y") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
print $csv_output;
$query  = 'DROP TABLE books_temp';
$result = mysql_query($query);
exit;
?>

休息一会儿后,我又回到这里,正如你们所说,我根本不需要临时桌子

为了完整性,万一其他人遇到同样的问题,这是最终的解决方案

通过SELECT查询上的when子句,脚本工作正常,我最终发现,但我仍然没有获得任何数据(只是列名)。我终于明白了我没有得到任何数据的原因,因为尽管
“$session->username”
在我的PHP页面中可以访问当前用户的名称,但仅链接到该页面的脚本无法访问该会话信息

最后,我发现我需要添加额外的变量
$username
,并从URL上的查询字符串中获取该变量的值(我不太确定会话信息是如何到达脚本的-头没有准备好!)。因为脚本无法访问
“$session->username”
,所以脚本无法工作

而不是通过以下链接到脚本:

<a href=\"scripts/mysql2csv.php">Download your list</a>
以及:


至少现在一切都好了!(在另一次讨论中,我确实尝试了一些建议,但都没有成功——要么是我只得到了标题行,要么是一大堆错误)

我有一个穷人的方法来制作CSV文件,只要列类型简单。这可以通过以下方式完成

完成此步骤后,文件/var/lib/mysql/mydb/books\u csv.csv将存在

您可以按自己的意愿打开文件。顺便说一句,所有字段都用双引号括起来


试试看

这里回答了通过PHP从MySql导出到CSV的问题:使用视图而不是临时表。假设任何用户都可以通过更改URL中的
$user
变量下载其他用户的书籍。
$accname = $session->username;
<a href=\"scripts/mysql2csv.php?user=$accname\">Download your list</a>
$username = mysql_real_escape_string($_GET['user']);
USE mydb
CREATE TABLE books_csv SELECT * FROM books WHERE 1=2;
ALTER TABLE books_csv ENGINE=CSV;
INSERT INTO books_csv SELECT * FROM books WHERE username='...';