2016-07-20 9 views
0

私の仲間のすべてのコーダーに挨拶...コードワールドです。PHP SQLSRV return JSON

今回はSQL Serverデータベースを使用していますので、構文に合わせて調整しています。

JSONを返そうとしていますが、正しい書式設定ができないようです。そこに、

{"data":[["", "0000111111", "JBR", "00000999999", "AMERICA INC", "Jan 1 1900 12:00AM", "", "55"]["", "0000777777", "7ALEXANDER LOG", "000222222", "NORRIS INC", "Jan 1 1900 12:00AM", "", "56"]]} 

あなたが気づく場合:上記のコードを使用して

<?php 
    $select = "SELECT 
       CONCAT('\"',COALESCE('',''),'\"') AS EDIT 
       ,CONCAT('\"',COALESCE([FOR_PARTNER],''),'\"') AS PARTNER_CODE 
       ,CONCAT('\"',COALESCE([FOR_NAME],''),'\"') AS PARTNER_NAME 
       ,CONCAT('\"',COALESCE([SHP_PARTNER],''),'\"') AS SHIPPER_PCODE 
       ,CONCAT('\"',COALESCE([SHP_NAME],''),'\"') AS SHIPPER_NAME 
       ,CONCAT('\"',COALESCE([MODDATE],''),'\"') AS MODDATE 
       ,CONCAT('\"',COALESCE([MODUSER],''),'\"') AS MODUSER 
       ,CONCAT('\"',COALESCE([ID],''),'\"') AS ID 
      FROM 
       [main].[dbo].[exceptions]"; 

$query = sqlsrv_query($dbc, $select); 
$resnum = sqlsrv_num_rows($query); 

// here is where the error lies 

echo "{\"data\":["; 
$i = 1;  
while($row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)) 
{ 
    echo "["; 
    echo implode(', ', $row); 
    echo "]"; 
    if($i < $resnum){ 
    echo ","; 
    } 
    $i++; 
} 
echo "]}"; 

sqlsrv_free_stmt($query); 
?> 

、このように見えますが返されるJSON:私のPHPスクリプトで

、私はこの下のコードを持って内側の配列をカンマで区切ることはできません。

{"data":[["", "0000111111", "JBR", "00000999999", "AMERICA INC", "Jan 1 1900 12:00AM", "", "55"],["", "0000777777", "7ALEXANDER LOG", "000222222", "NORRIS INC", "Jan 1 1900 12:00AM", "", "56"]]} 

私はMYSQLと同じ構文を使用しましたが、それはもちろんMYSQLです。私は上記のSQLSRVを使用しています。 IMPLODEがこれを理解しているかどうかはわかりません。

要するに、内部配列を区切るためにカンマを取得する必要があります。

誰か私のエラーが表示されますか?

ご協力ありがとうございます。ここで

+5

はそれをしないでください。あなた自身のjsonを構築しないでください。 NORMALクエリを実行し、NORMAL結果セットを返し、次にネイティブPHPデータ構造を構築します。それが終わると、その構造体上で 'json_encode()'を実行することができ、問題はなくなります。あなたのバージョンは明らかに動作しておらず、json注入攻撃に対しても脆弱です。 –

答えて

0

はあなたのコードの例です:

<?php 

$select = "SELECT 
      PARTNER_CODE, PARTNER_NAME, SHIPPER_PCODE, SHIPPER_NAME, MODDATE, MODUSER, ID 
     FROM 
      [main].[dbo].[exceptions]"; 

$query = sqlsrv_query($dbc, $select); 
$res = []; 

while($row = sqlsrv_fetch_array($query, SQLSRV_FETCH_NUMERIC)) { 
// you need SQLSRV_FETCH_NUMERIC for your result, but i prefere to use SQLSRV_FETCH_ASSOC 
    $res[] = $row; 
} 

sqlsrv_free_stmt($query); 
echo json_encode([ 'data' => $res ]);