2016-10-14 7 views
2

JSON/PHPの使用については、初心者です。私はこの答えに基づいてこれを動作させるように努力してきました。MySQLデータをJSON形式で返します

How to generate .json file with PHP?

私はそれが新しいファイルに書き込むことなく、JSON形式での出力にそれをするMySQLのデータベースを照会しようとしていますすなわち、私は動的なデータを取得しているので、file.json。 json配列を作成するスクリプトを作成できますが、JSON形式で出力する必要があります。上記の例のリンクから私が下に取り組んでいるスクリプトは、DBに接続しますが、データを入力していません。それは私にこの出力を与えます。 DB接続チェックを追加して、スクリプトがDBに接続しているかどうかを確認しました。

接続に成功しました{ "ストリーマー":[]}

これは、私は現在で働いていたコードです。私が逃して改善できるものを教えてくれる人はいますか?セキュリティ上の理由からDB情報が削除されました。

<?php 

header('Content-type:application/json;charset=utf-8'); 

//Make connection to database 
$db=new PDO('mysql:dbname=streamdb;host=localhost;','root',''); 

// Check connection 
if ($db->connect_error) { 
    die("Connection failed: " . $db->connect_error); 
} 
echo "Connected successfully"; 

//Prepare the query for analyzing  
$sql=$db->prepare('select * from maintable'); 

$response = array(); 
$streamers = array(); 
$result=mysql_query($sql); 
while($sql=mysql_fetch_array($result)) 
{ 
$displayname=$row['DisplayName']; 
$streamkey=$row['StreamKey']; 

$streamers[] = array('DisplayName'=> $displayname, 'StreamKey'=> $streamkey); 

} 

$response['streamers'] = $streamers; 

echo stripslashes(json_encode($response)); 

?> 

-Thanks!

+1

を確認することができます。不正な形式のJSONです。 – Derek

+0

そして、stripslashesを使わないで、 'json_encode()'がそれを処理します。 – Derek

+0

"$ row"変数がどこにでも初期化されていないようです。たぶんそうだろう:while($ row = ...) –

答えて

1

まず、PDOを使用してください。 mysql_ *関数はありません。

次に、あなたのコードは次のようになります。

$pdo = new PDO('mysql:host=...', 'username', 'password', [ 
     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 
    ]); 
$result = $pdo->query('SELECT DisplayName, StreamKey FROM ...'); 
$rows = $result->fetchAll(PDO::FETCH_ASSOC); 
header('Content-Type: application/json;charset=utf-8'); 
echo json_encode(['streamers' => $rows], 
     JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK); 

PDO::ERRMODE_EXCEPTIONは、彼らが簡単で一貫性のある方法で取り扱うことができるので、例外としてすべてのエラーをスローするようにPDOを設定します。

は、列名が配列キーとして使用される配列として行を返すように設定します。

json_encode()は、有効なJSON出力を生成します。 JSONをHTMLに埋め込んでいるわけではないので、エスケープされたスラッシュは必要ありません。簡単にデバッグできるようにインデントされています。

+0

その提案をありがとう。私はそれを試して、それは働いているように見えます。これが正しくフォーマットされているように見えますか? http://www.livestormsmedia.com/livestormchasing/api/streaming/json.php 特定の情報を表示するだけでよいので、私は必要な調整がいくつかあります。あなたのソリューションでは、どうすれば特定のデータだけを取得できますか? – Texan78

+0

いいですね。特定のデータのみをプルするには、SQLクエリでそれらを列挙します(答えを更新しました)。 –

+0

ガイダンスと役立つ説明をいただきありがとうございます。偉大な作業をしているようだ! – Texan78

0

私がコメントで言ったように、問題はおそらく "$行"が初期化されていないことです。

while($row=mysql_fetch_array($result)) 

また、PDOと互換性のないmysql_関数を使用しました。あなたは$db->queryを使ってリクエストを行うべきです。

あなたが提案を求めたとき、私はあなたに私が使っているトリックを与えるかもしれません。

基本的にクエリの結果の内容($結果)であるテーブルを取得するだけのコードがたくさんあると思います。そして、私はほぼすべての要求に対して同様のコードを持っていると思います。だから一般的には、extractResultという汎用関数を構築して、クエリの結果から行の配列を直接作成するということです。

/** 
* Extract a php array from the result of a db query. 
* This result can be directly parsed in JSON for instance. 
*/ 
function extractResult($res) { 
    $arr = array(); 
    while($line = $res->fetch()) { 
     $count = count($line)/2; 
     for ($i=0; $i<$count; $i++) { 
      unset($line[$i]); 
     } 
     array_push($arr, $line); 
    } 
    return $arr; 
} 

注:ここでは

は機能である「未設定」でループのために数字でエントリを削除するために作られています。フェッチによって返されるものは、次のようなものです。

Array("DisplayName" => "Loulou", 0 =>"Loulou", "StreamKey" => 12, 1 => 12) 

これで数値の重複が削除されます。

だから、このようにそれを使用することができますし、あなたのコードは、道軽くなる:あなたが要求に直接たい列名を指定する必要が

<?php 

header('Content-type:application/json;charset=utf-8'); 

//Make connection to database 
$db=new PDO('mysql:dbname=streamdb;host=localhost;','root',''); 

// Check connection 
if ($db->connect_error) { 
    die("Connection failed: " . $db->connect_error); 
} 
echo "Connected successfully"; 

$result=$db->query('select display_name AS DisplayName, stream_key AS StreamKey from maintable'); 

$response = array(); 
$response['streamers'] = extractResult($result); 

echo json_encode($response); 

?> 

注意! :)

私はいつもこのトリックを使ってDBからJSONを作成するのがずっと簡単で軽いです。 :) がんばろう。

0

ここでは、JSONヘッダを送信しているときは、JSON、プレーンテキストをエコーすることができない作業コード

<?php 
$con=mysqli_connect($servername,$username,$password,$databasename); 
if (mysqli_connect_errno()) 
{ 
echo "Connection Error" . mysqli_connect_error(); 
} 
$query = "SELECT * FROM TableName"; 
$result = mysqli_query($con,$query); 
$querydata = array(); 
while($data = mysqli_fetch_array($result)) { 
$querydata[] = $data; 
} 
echo json_encode($querydata); 
mysqli_close($con); 
?> 
関連する問題