mysql foreach fwrite

有些话、适合烂在心里 提交于 2019-12-11 16:49:10

问题


I use some code here, transfer mysql query data into json data and write into a file. where is the problem? why the file is zero kb?

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);
}

回答1:


Because you're reopening the file as read only

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

try

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

or

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

you could also open the file for writing at the start, append your rows in a variable and then write it all together to the file.

$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);



回答2:


Several things.

  • You dont need (and should avoid) to open the file in every iteration
  • You open the file read-only (r)

At all something like this should do it

$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);

Additional you append separate json structures into the file, what is probably not, what you want. You should first collect all you want to store into one json structure and save it then

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

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

This feels more like what you are probably looking for.




回答3:


You are opening the file read-only. You probably want 'w' or 'r+'.




回答4:


You are opening the file for reading only

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

You also dont need

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

just use:

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


来源:https://stackoverflow.com/questions/6312535/mysql-foreach-fwrite

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!