2013-10-08 39 views
0

我想通過使用PHP從mysql數據庫生成JSON文件。到目前爲止,我有:使用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文件,但該文件只包含「null」。

+0

什麼是'$的價值json_string'和'$ data'? – Julio

+0

'mysql_'函數已被棄用。改爲使用'mysqli'或'PDO'。 – Brewal

+0

不適合。 $ data – lvil

回答

0

隨機猜測:json_encode預計UTF-8編碼的數據,並會表現出你對任何非UTF-8,非ASCII輸入描述的行爲。您從數據庫獲得的數據可能是Latin-1編碼的。

無論是設置數據庫連接utf8直接從數據庫接收UTF-8編碼的數據(見UTF-8 all the way through),或使用(我討厭這樣說,是因爲這個功能經常被濫用它甚至不是搞笑,但它在這裏正確應用)utf8_encode對從數據庫中獲得的所有數據進行轉換,將其從Latin-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