2009-11-10 2 views
1

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

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

test:test 
    test2:test2 
    test3:test3 

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

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

ответ

3

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

Вы можете использовать 'флаг FILE_APPEND' с file_put_contents, чтобы добавить вместо перезаписи –

+0

Правда, но не может быть то, что вы хотите, если вы запустите сценарий дважды подряд. – Greg

+0

@Greg Это самый подробный ответ, спасибо! – Homework

1

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

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

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

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

1

Похоже, вы открываете и переписываете все содержимое файла с каждым проходом через цикл 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"; 
+0

Спасибо за перерыв в ссылке, я забыл об этом. – Homework

2

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

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

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

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

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

Успехов

1

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

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

должен быть

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

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

0

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

Я предпочитаю делать такого рода вещи в баш;)

Смежные вопросы