2011-06-10 46 views
0

我在這裏使用了一些代碼,將mysql查詢數據轉換成json數據並寫入文件。哪裏有問題?爲什麼文件是零kb?mysql foreach fwrite

while($row = mysql_fetch_array($Query)){ 
    $arr = array ('name'=>$row['name']); 
    $jsondata = json_encode($arr); 
    $countfile="data.txt"; 
    if(!file_exists($countfile)) 
    { 
    fopen($countfile,"w"); 
    } 
    $fp = fopen($countfile, 'r'); 
    fwrite($fp, $jsondata); 
    fclose($fp); 
} 

回答

2

因爲你重新打開該文件作爲只讀

$fp = fopen($countfile, 'r');

嘗試

$fp = fopen($countfile, 'w'); // to write

$fp = fopen($countfile, 'a'); // to append

你也可以打開文件在開始寫作,在一個變量追加你行,然後寫它全部一起到文件。

$countfile="data.txt"; 
$fp = fopen($countfile, 'w'); 
while($row = mysql_fetch_array($Query)) 
{ 
    $arr = array ('name'=>$row['name']); 
    $jsondata .= json_encode($arr) . "\n"; 

} 
fwrite($fp, $jsondata); 
fclose($fp); 
+0

我是一個較新的,但使用'$ fp = fopen($ countfile,'a');'可以在foreach情況下很好地工作。 – 2011-06-10 22:22:04

0

您正在打開該文件的只讀

$fp = fopen($countfile, 'r'); 

您也不需要

if(!file_exists($countfile)) 
    { 
    fopen($countfile,"w"); 
    } 

只需使用:

$fp = fopen($countfile, 'w'); 
+0

'$ fp = fopen($ countfile,'w');'在我的測試中插入最新的一個foreach。它會刪除收貨人數據。 – 2011-06-10 22:23:47

5

幾件事。

  • 你不需要(應避免)在每次迭代
  • 您打開該文件只讀(r

在任何這樣的事情應該這樣做

打開文件
$countfile="data.txt"; 
$fp = fopen($countfile, 'w'); 
while($row = mysql_fetch_array($Query)) 
{ 
    $arr = array ('name'=>$row['name']); 
    $jsondata = json_encode($arr); 

    fwrite($fp, $jsondata); 
} 
fclose($fp); 

另外你將單獨的json結構添加到文件中,可能不是,你想要什麼。你應該先收集所有你想存儲到一個 JSON結構,然後

$data = array(); 
while($row = mysql_fetch_array($Query)) 
{ 
    $data[] = array ('name'=>$row['name']); 

} 
file_put_contents('data.txt', json_encode($data)); 

這種感覺保存它更像是你可能尋找。

0

您正在以只讀方式打開該文件。你可能想要'w''r+'