Php 从SQL中提取数据并写入文本文件

Php 从SQL中提取数据并写入文本文件,php,sql,text-files,Php,Sql,Text Files,我试图从SQL中提取数据,然后将其写入文本文件。这在某种程度上可以做到这一点,但它只从表中提取1,该表在文本文件上读取test:test 我希望能够提取所有数据 从表中,然后发布到 列表格式的文本文件,例如 这个 我需要找出我做错了什么 <?php $sql = mysql_query("SELECT * FROM _$setprofile ORDER BY fc DESC"); while($row = mysql_fetch_array($sql)){ $user = $row['us

我试图从SQL中提取数据,然后将其写入文本文件。这在某种程度上可以做到这一点,但它只从表中提取1,该表在文本文件上读取
test:test

我希望能够提取所有数据 从表中,然后发布到 列表格式的文本文件,例如 这个

我需要找出我做错了什么

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

该函数将覆盖整个文件-这就是为什么每次都只得到最后一条记录的原因

您可以使用和来代替

虽然比构建一个大字符串并使用单个调用
file\u put\u 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>";
?>

文件内容覆盖现有文件。使用上述代码,您将只获得一行

请尝试以下方法:

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

您没有将数据库结果附加到$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字符串中获得所有结果后,将其写入文件。

每次通过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

使用

$accounts=$user。":" . $通过。“\n”

但是,如果您已经知道这一点,并将其用于调试目的,那么忽略这一点


祝你好运

如果它是一个文本文件,

标记也不会对你特别有用。您需要使用
\n
在文本文件中生成换行符。如果是html,那么情况就不同了

$accounts = "$user:$pass<br>";
你肯定应该将
文件\u put_contents
从循环中拉出,否则每次通过循环时都会覆盖该文件。

echo“按fc desc从表顺序中选择concat(用户,,:',传递,
”|mysql


我更喜欢在bash中做这种事情;)

您可以使用
FILE\u APPEND
标志,将FILE\u put\u内容添加到APPEND而不是overwriterue,但如果您连续运行脚本两次,可能不是您想要的。感谢链接中断,我忘记了这一点。
  $accounts = "$user:$pass\n";
$accounts = "$user:$pass<br>";
$accounts .= "$user:$pass\n";