2009-11-10 3 views
1

SQL에서 데이터를 가져 와서 텍스트 파일에 쓰려고합니다. 이것은 어느 정도는 이지만 테이블에서 1을 가져옵니다.이 테이블은 텍스트 파일에서 test:test<br>으로 읽습니다.SQL에서 데이터를 가져 와서 텍스트 파일에 쓰는 중

나는 ... 테이블에서 모든 데이터를 당긴 다음과 같은 이 같은 목록 형식으로 텍스트 파일로 게시 할 수

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

답변

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

대신 –

+0

덮어 쓰기 참의 추가 할 file_put_contents를 가진'FILE_APPEND' 플래그를 사용할 수 있지만 당신이 경우 원하는하지 않을 수도 있습니다 스크립트를 두 번 연속 실행하십시오. – Greg

+0

@ 그렉 이것은 가장 심오한 답변입니다, 감사합니다! – 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 루프를 통과 할 때마다 파일의 전체 내용을 다시 열고 재 작성하는 것처럼 보입니다. 그것은 단지 왜

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

링크를 끊어 줘서 고마워. 그걸 잊어 버렸어. – Homework

2

기타가 대답했다 : 당신>은 < BR을 원하지 않는 경우, 또한

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

내가 bash는 이런 종류의 일을하는 것을 선호한다)

관련 문제