我想下载一个包含我的mysql查询结果的文件,但我的问题是,.txt文件只包含我的mysql查询的最后一个结果。它实际应该包括5个这样的结果:
http://user:password@server.com:8080
有人能告诉我问题在哪里吗?
<?php
$result = mysql_query("SELECT serverurl FROM ibn");
echo mysql_error();
while ($row = mysql_fetch_array($result)) {
$result2 = mysql_query("SELECT streamport,streamname FROM streams");
echo mysql_error();
while ($row2 = mysql_fetch_array($result2)) {
$result3 = mysql_query("SELECT client_username,client_openpasswd FROM clients WHERE `client_id` = '$id' ");
echo mysql_error();
while ($row3 = mysql_fetch_array($result3)) {
$streamurl= $row['serverurl'];
$streamport = $row2['streamport'];
$streamuser= $row3['client_username'];
$streampassword= $row3['client_openpasswd'];
$streamchannel= $row2['streamname'];
echo "<p>http://$streamuser:$streampassword@$streamurl:$streamport</p>";
}
}
}
//Generate text file on the fly
header("Content-type: text/plain");
header("Content-Disposition: attachment; filename=bouquet.txt");
?>
答案 0 :(得分:0)
您可以通过将调用header()
移至脚本顶部并稍后发送数据来实现基本输出。只有在将任何输出发送到客户端之前发出标头命令才会生效。
您可以使用简单的脚本演示此内容:
<?php
header("Content-type: text/plain");
header("Content-Disposition: attachment; filename=bouquet.txt");
echo "A line of text\n";
您的代码的其余部分更有问题。目前尚不清楚为什么要这样做,但代码的效果是产生三个表的笛卡尔积。即每个表中的每一行都与每个其他表中的每一行组合。我怀疑这实际上是你想要的,但是......
使用没有JOIN
子句的SQL ON
可以更有效地实现相同的结果。使用它并连接所需的字段,您可以在单个SQL查询中执行几乎所有操作:
select
concat('http://',
clientname,':',
clientopenpassword,'@',
serverurl,':',
streamsport)
as URL
from ibn, streams, clients where client_id=1
我将把这个转换为一个可用的PHP脚本作为读者的练习,但上面的代码提供了一个很好的模板。请记住,只有一个查询和一个循环来获取结果并将其发出。
请注意,mysql_*()
已弃用 - 请将mysqli_*()
用于新代码。您还应该在查询中使用$id
时注意可能的SQL注入。