#php #mysql
#php #mysql
Вопрос:
У меня есть этот код (благодаря пользователям stackoverflow я получил нужную мне разметку :)). Тем не менее, я пришел к пути, о котором я никогда не знал. Мне нужно вывести эту форматированную таблицу запроса в текстовый файл на сервере.
<?php
// Make a MySQL Connection
mysql_connect("hostname.net", "user", "pass") or die(mysql_error());
mysql_select_db("database") or die(mysql_error());
// Get all the data from the "example" table
$result = mysql_query("SELECT * FROM cards ORDER BY card_id")
or die(mysql_error());
echo "";
echo " Name AgeTitlebar ";
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
// Print out the contents of each row into a table
echo "";
echo $row['card_id'];
echo "";
echo $row['title'];
echo "";
echo $row['item_bar'];
echo "";
}
echo "";
?>
Я знаю, что мог бы использовать что-то похожее на
<?php
$myFile = "test.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "Bobby Boppern";
fwrite($fh, $stringData);
fclose($fh);
?>
но я уверен, что это не может быть лучшим решением. Итак, я предполагаю, что мой вопрос в том, знает ли кто-нибудь, как этого добиться?
Комментарии:
1. Почему вы уверены, что это не лучшее решение — PHP записывает файл, чего еще вы хотите?
Ответ №1:
Лучшим решением, особенно если вам не хватает памяти, было бы поместить запись в цикл:
$fh = fopen('cards.csv', 'w');
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
fputcsv($fh, array($row['card_id'], $row['title'], $row['item_bar']), "t");
}
fclose('cards.csv');
Обратите внимание, что я использовал fputcsv
для вывода данных в формате CSV (используя табуляцию в качестве разделителя). Это должно быть легко прочитано вручную, а также будет легко понято, например, программой для работы с электронными таблицами. Если вы предпочитаете пользовательский формат, вам следует использовать fwrite
как в вашем вопросе.
Комментарии:
1. Я пробовал это, но он продолжает говорить мне, что title_bar и все остальное не определено. хм
Ответ №2:
Взгляните на:
http://dev.mysql.com/doc/refman/5.0/en/select.html
особенно:
[INTO OUTFILE 'file_name' export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
Ответ №3:
Что-то вроде этого?
// Make sure the file exists, do some checks.
// Loop trough result set and append anything to the file.
while (false !== ($aRow = mysql_fetch_assoc($rResult))) {
$sCreateString = $aRow['field1'].';'.$aRow['field2'];
file_put_contents('example.txt', $sCreateString, FILE_APPEND);
}
// Done
Если вам нужен точный дамп таблицы базы данных, есть варианты получше. (на самом деле намного лучше).
Ответ №4:
Если вы хотите записать текстовый файл, то в том, что вы предложили, нет ничего плохого.
В руководстве по PHP есть много информации: http://www.php.net/manual/en/ref.filesystem.php
Это полностью зависит от того, как вы хотите сохранить данные внутри файла. При желании вы можете создать свой собственный формат базы данных в виде плоского файла и извлечь данные с помощью PHP после прочтения файла.