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

时间:2009-11-10 21:47:00

标签: php sql text-files

我正在尝试从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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

看起来你正在重新打开并重写整个文件的内容,每次通过你的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>";
?>

另外,如果你不想要&lt; br&gt ;,但是真正的换行符,请使用:

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

答案 2 :(得分:2)

其他人已经回答了为什么它只在文件中写入一个内容,这更像是一个建议,但如果你想记录实际的用户和密码,而不是:

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

使用

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

但如果您已经知道并且正在使用它进行调试,那么请忽略它。

祝你好运

答案 3 :(得分: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>";
?>

答案 4 :(得分:1)

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

答案 5 :(得分:1)

如果是文本文件,<br>标记也不会对您特别有用。您需要使用\n在文本文件中生成换行符。如果它是html,那么我们会有不同的情况。

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

应该是

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

你绝对应该将file_put_contents拉出循环,否则每次循环都会覆盖文件。

答案 6 :(得分:0)

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

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