mysql foreach fwrite - PullRequest
       10

mysql foreach fwrite

0 голосов
/ 11 июня 2011

Я использую здесь некоторый код, переношу данные запроса mysql в данные json и запишу в файл. в чем проблема? почему файл ноль кб?

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

Ответы [ 4 ]

5 голосов
/ 11 июня 2011

Несколько вещей.

  • Вам не нужно (и следует избегать) открывать файл на каждой итерации
  • Вы открываете файл только для чтения (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));

Это похоже на то, что вы, вероятно, ищете.

2 голосов
/ 11 июня 2011

Поскольку вы открываете файл только для чтения

$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 голосов
/ 11 июня 2011

Вы открываете файл только для чтения. Вы, вероятно, хотите 'w' или 'r+'.

0 голосов
/ 11 июня 2011

Вы открываете файл только для чтения

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

Вам также не нужно

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

просто используйте:

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