Получение данных из SQL и запись в текстовый файл - PullRequest
2 голосов
/ 11 ноября 2009

Я пытаюсь извлечь данные из SQL, а затем записать их в текстовый файл. Это делает это, в некоторой степени, , но он извлекает только 1 из таблицы, которая читает test:test<br> в текстовом файле.

Я хочу быть в состоянии получить все данные из таблицы, а затем опубликовать в текстовый файл в формате списка, например это ...

    test:test
    test2:test2
    test3:test3

Мне нужно выяснить, что я делаю неправильно.

<?php
$sql = mysql_query("SELECT * FROM _$setprofile ORDER BY fc DESC");
while($row = mysql_fetch_array($sql)){
$user = $row['user'];
$pass = $row['pass'];

$accounts = "$user:$pass<br>";

//Functionsss!
$file = "backups/$newcode.txt";
file_put_contents($file, $accounts);
}

echo "<a href=backups/$newcode.txt>TEST!</a>";
?>

Ответы [ 7 ]

5 голосов
/ 11 ноября 2009

Функция file_put_contents() перезаписывает весь файл, поэтому каждый раз получается только последняя запись.

Вместо них можно использовать fopen() и fwrite().

Хотя это немного сложнее, чем создать большую строку и использовать один вызов file_put_contents, этого не хватит памяти, если у вас много записей.

<?php

$file = "backups/$newcode.txt";
$f = fopen($file, 'w'); // Open in write mode

$sql = mysql_query("SELECT * FROM _$setprofile ORDER BY fc DESC");
while($row = mysql_fetch_array($sql))
{
    $user = $row['user'];
    $pass = $row['pass'];

    $accounts = "$user:$pass<br>";
    // Or "$user:$pass\n" as @Benjamin Cox points out

    fwrite($f, $accounts);
}

fclose($f);

echo "<a href=backups/$newcode.txt>TEST!</a>";
?>
3 голосов
/ 11 ноября 2009

Похоже, что вы открываете и перезаписываете все содержимое файла при каждом проходе цикла while.

Попробуйте это:

<?php
$sql = mysql_query("SELECT * FROM _$setprofile ORDER BY fc DESC");
$file = "backups/$newcode.txt";
$fh = fopen($file, 'a') or die("can't open file");

while($row = mysql_fetch_array($sql)){
  $user = $row['user'];
  $pass = $row['pass'];

  $accounts = "$user:$pass<br>";

  fwrite($fh, $accounts);
}

fclose($fh);

echo "<a href=backups/$newcode.txt>TEST!</a>";
?>

Кроме того, если вы не хотите
, а настоящий разрыв строки, используйте:

  $accounts = "$user:$pass\n";
2 голосов
/ 11 ноября 2009

Другие ответили, почему он записывает только один контент в файл, это скорее совет, но если вы хотите записать фактического пользователя и пароль вместо:

$accounts = "$user:$pass<br>";

использование

$accounts = $user . ":" . $pass . "\n";

но если вы уже знали это и использовали это для отладки, не обращайте на это внимания.

Удачи

1 голос
/ 11 ноября 2009

Если это текстовый файл, тег <br> также не будет особенно полезен для вас. Вам нужно будет использовать \n, чтобы вызвать перенос строки в текстовом файле. Если бы это был HTML, то у нас была бы другая ситуация.

$accounts = "$user:$pass<br>";

должно быть

$accounts .= "$user:$pass\n";

и вам определенно следует вытащить file_put_contents из цикла, иначе файл будет перезаписываться каждый раз при прохождении цикла.

1 голос
/ 11 ноября 2009

Вы не добавляете результаты своей базы данных в строку $ accounts; Вы создаете это с нуля каждый раз. Попробуйте что-то вроде этого:

<?php
$accounts = "";
$sql = mysql_query("SELECT * FROM _$setprofile ORDER BY fc DESC");
while($row = mysql_fetch_array($sql)) {
  $user = $row['user'];
  $pass = $row['pass'];

  $accounts .= "$user:$pass<br>";
}

//Functionsss!
$file = "backups/$newcode.txt";
file_put_contents($file, $accounts);

echo "<a href=backups/$newcode.txt>TEST!</a>";
?>

поэтому вы добавляете его, а затем, получив все свои результаты в строке $ accounts, вы записываете его в файл.

1 голос
/ 11 ноября 2009

file_put_contents перезаписывает существующий файл. С помощью приведенного выше кода вы получите только одну строку.

Попробуйте вместо этого:

<?php

$sql = mysql_query("SELECT * FROM _$setprofile ORDER BY fc DESC");
$content = "";

while($row = mysql_fetch_array($sql)){
  $user = $row['user'];
  $pass = $row['pass'];

  $accounts = "$user:$pass<br>";
  $content .= $accounts;

}

$file = "backups/$newcode.txt";
file_put_contents($file, $content);

echo "<a href=backups/$newcode.txt>TEST!</a>";
?>
0 голосов
/ 11 ноября 2009

echo "select concat(user,':',pass,'<br>') from table order by fc desc" | mysql <database>

Я предпочитаю делать подобные вещи в bash;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...