У меня есть скрипт для создания CSV-файла из таблицы базы данных, который отлично работает, за исключением того, что он выводит все данные в таблице, и мне нужно, чтобы он выводил данные только для текущего вошедшего в систему пользователя. Приложение, которое я разрабатываю, предназначено для того, чтобы пользователи могли хранить списки книг, которые они прочитали, хотят прочитать и т. Д., И я хочу, чтобы они могли загружать список своих книг, которые они могут импортировать в Excel например. (Будет ли файл CSV лучшим вариантом для этого, учитывая, что есть также OpenOffice и т. Д., А также MS Excel?)
Я понял, что мне нужно создать временную таблицу, чтобы использовать запрос выбора для выбора только записей, принадлежащих текущему вошедшему в систему пользователю. Я могу получить доступ к данным для текущего пользователя, используя 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, кажется, что временная таблица не создается. Я, очевидно, делаю что-то здесь неправильно или что-то упускаю, но я понятия не имею, что.