Вывод запроса в текстовый файл

#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 после прочтения файла.