Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pulling data from SQL, and writing to a text file

I am trying to pull data from SQL, and then write it to a text file. This does that, to an extent, but it only pulls 1 from the table, which reads test:test<br> on the text file.

I want to be able to pull all the data from the table, and then post to the text file in a list format such as this...

    test:test
    test2:test2
    test3:test3

I need to find out what I am doing wrong.

<?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>";
?>
like image 448
homework Avatar asked Feb 11 '26 18:02

homework


2 Answers

The file_put_contents() function overwrites the whole file - that's why you end up with only the last record each time.

You can use fopen() and fwrite() instead.

While a little more complicated than building a large string and using a single call to file_put_contents, this won't run out of memory if you have a lot of records.

<?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>";
?>
like image 85
Greg Avatar answered Feb 14 '26 11:02

Greg


It looks like you are reopening and rewriting the entire contents of the file with every pass through your while loop.

Try this:

<?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>";
?>

Also, if you don't want the < br >, but a real line break, use:

  $accounts = "$user:$pass\n";
like image 25
Benjamin Cox Avatar answered Feb 14 '26 12:02

Benjamin Cox