【发布时间】:2024-01-11 04:36:02
【问题描述】:
我有一个用于从数据库表创建 CSV 文件的脚本,它工作正常,除了它输出表中的所有数据,而且我需要它只为当前登录的用户输出数据。我正在开发的应用程序是让用户能够存储他们已经阅读、想要阅读等的书籍列表,并且我希望能够允许他们下载他们可以导入 Excel 的书籍列表例如。 (考虑到还有 OpenOffice 等以及 MS Excel,CSV 文件会是最好的选择吗?)
我发现我需要创建一个临时表来使用选择查询来仅选择属于当前登录用户的记录。我可以使用WHERE 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;
?>
它可以完美地输出所有数据,但是当我尝试将它与临时表一起使用时仍然会输出所有数据。顺便说一句,我也尝试删除从末尾删除临时表的指令,这没有任何区别。此外,检查 PhpMyAdmin,似乎没有创建临时表。我显然在这里做错了什么或遗漏了什么,但我不知道是什么。
【问题讨论】:
-
通过 PHP 从 MySql 导出到 CSV 已在此处得到解答:*.com/questions/125113/…
-
使用 VIEW 代替 TEMPORARY TABLE
标签: php mysql csv temp-tables