2013-10-08 3 views
0

Я пытаюсь сгенерировать JSON-файл из базы данных mysql с помощью PHP. До сих пор у меня есть:Использовать PHP для вывода значений mysql в файл JSON

<?php 

error_reporting(-1); 

$result=mysql_query("SELECT * FROM wp_posts"); 

$i=0; 
while($row=mysql_fetch_array($result)) { 
$response[$i]['post_status'] = $row['post_status']; 
$response[$i]['post_title']= $row['post_title']; 
$data['posts'][$i] = $response[$i]; 
$i=$i+1; 
} 

$json_string = json_encode($data); 

$file = 'file.json'; 
file_put_contents($file, $json_string); 
?> 

Это создаст файл file.json но файл содержит только «нуль».

+0

Что такое значение '$ json_string' и '$ data'? – Julio

+0

Функции 'mysql_' устарели. Вместо этого используйте 'mysqli' или' PDO'. – Brewal

+0

smth. неверно с $ data – lvil

ответ

0

Случайная догадка: json_encode ожидает UTF-8 закодированных данных и будет демонстрировать поведение, вы можете описать на любом не-UTF-8, ввод не-ASCII. Данные, которые вы получаете из базы данных, скорее всего, кодируются латинским-1.

Либо установить подключение к базе данных для utf8 для получения данных в кодировке UTF-8 кодируются непосредственно из базы данных (см UTF-8 all the way through), или использовать (и я ненавижу говорить об этом, потому что эта функция так часто злоупотребляют это даже не смешно, но он правильно применяется здесь)utf8_encode по всем данным, которые вы получаете из базы данных, чтобы преобразовать их с латинского-1 в UTF-8.

Так как:

// set the connection charset 
mysql_set_charset('utf8'); 

$result = mysql_query("SELECT post_status, post_title FROM wp_posts"); 

$data = array(); 
while ($row = mysql_fetch_assoc($result)) { 
    $data['posts'][] = $row; 
} 

$json_string = json_encode($data); 

... 

или:

$result = mysql_query("SELECT post_status, post_title FROM wp_posts"); 

$data = array(); 
while ($row = mysql_fetch_assoc($result)) { 
    $row = array_map('utf8_encode', $row); 
    $data['posts'][] = $row; 
} 

$json_string = json_encode($data); 

... 
+0

Я попробовал оба примера, которые вы предоставили, но я до сих пор не получаю никаких данных. Файл содержит только пустой набор скобок. – user715564

+0

Вы действительно получаете какие-либо данные ?! Вы пробовали 'var_dump ($ data)'? – deceze

+0

Я сделал и ничего не выводил. – user715564

0

Попробуйте что-нибудь подобное.

error_reporting(-1); 

$result = mysql_query("SELECT * FROM wp_posts"); 

$data = array(); 

while ($row = mysql_fetch_array($result)) { 
    $data['posts']['post_status'][] = $row['post_status']; 
    $data['posts']['post_title'][] = $row['post_title']; 
} 

$json_string = json_encode($data); 

$file = 'file.json'; 
file_put_contents($file, $json_string); 
+0

Я пробовал это, и теперь я просто получаю пустые скобки "[]". – user715564

-1

Скорее всего, чтобы быть UTF-8 проблема со специальными символами, попробуйте это

<?php 

error_reporting(-1); 

$result = mysql_query("SELECT * FROM wp_posts"); 

$i = 0; 
while ($row = mysql_fetch_array($result)) { 
    $response[$i]['post_status'] = htmlentities($row['post_status'],ENT_COMPAT, 'ISO-8859-1'); 
    $response[$i]['post_title'] = htmlentities($row['post_title'],ENT_COMPAT, 'ISO-8859-1'); 

    $data['posts'][$i] = $response[$i]; 
    $i = $i + 1; 
} 

$json_string = json_encode($data); 

$file = 'file.json'; 
file_put_contents($file, $json_string); 
?> 
+0

Не кодируйте HTML-данные, когда вы вообще не находитесь в контексте HTML. – deceze

Смежные вопросы