SQL Server данных в JSON с помощью PHP - PullRequest
0 голосов
/ 25 мая 2018

Мой код json ничего не показывает, я уже перепробовал много кодов, но ничего не помогло.

include('connect.php');
$sql = "SELECT *  FROM items";  
$stmt = sqlsrv_query( $conn, $sql);

if( $stmt === false)
{
   echo "Error in query preparation/execution.\n";  
   die( print_r( sqlsrv_errors(), true));  
}

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))  //this loop is working
{    
  echo $row['item_id'].", ".$row['item_name'].", ".$row['Barcode']."<br>"; 
}

$json = array();
do {
   while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
     $json[] = $row;
   }
} while ( sqlsrv_next_result($stmt) );

echo json_encode($json);  //empty?!
sqlsrv_free_stmt( $stmt);

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Если ЭТО работает:

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))  //this loop is working
{    
  echo $row['item_id'].", ".$row['item_name'].", ".$row['Barcode']."<br>"; 
}

, остальные тоже должны работать.

Как ADyson говорит:

if( $stmt === false)
{
   echo "Error in query preparation/execution.\n";  
   die( print_r( sqlsrv_errors(), true));  
}

$json = array();

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{    
     $json[] = $row;
}

echo json_encode($json);

для двойной проверки добавьте свое эхо в этот код, например:

if( $stmt === false)
{
   echo "Error in query preparation/execution.\n";  
   die( print_r( sqlsrv_errors(), true));  
}

$json = array();

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{    
     echo $row['item_id'].", ".$row['item_name'].", ".$row['Barcode']."<br>";
     $json[] = $row;
}

echo json_encode($json);

Если этот код работает, примите ответ ADyson

0 голосов
/ 25 мая 2018

вот способ решения проблемы. Надеемся, ваш запрос хорошо написан.

$dataFinal= array();//final variable that will contain total array for json   
for($k=0;$k<count(variable_that_contents_the_resutl_array_query);$k++){

$ligne = array("item_id"=> $row['item_id'],
"item_name"=>$row['item_name'],"Barcode"=> $row['Barcode']); 
array_push($dataFinal, $ligne);//add line in array datafinal         

     }//end for loop
    $result = array($dataFinal);
    $response = new Response(json_encode($dataFinal));
    $response->headers->set('Content-Type', 'application/json');
    return $response;
0 голосов
/ 25 мая 2018

Существует множество вероятных проблем с этим:

1) Вы проверили, что ваш запрос действительно возвращает строки?

2) Вы дважды зацикливаете свои данные (два while( $row = sqlsrv_fetch_array... цикла), что бесполезно или неэффективно. Предложение

3) the do...while ( sqlsrv_next_result($stmt) ); также должно быть ненужным, так как fetch_array будетзнать, когда они доходят до конца данных, и у вас есть только один набор результатов, поэтому вам не нужно перемещаться между ними

4) вы выводите необработанные данные так же, как и JSON, поэтомуесли вы сделаете ajax-вызов этого сценария, он потерпит неудачу, потому что ответ будет частично содержать не-JSON данные

Я думаю, этого будет достаточно, чтобы получить некоторые разумные данные:

include('connect.php');
$sql = "SELECT *  FROM items";  
$stmt = sqlsrv_query( $conn, $sql);

if( $stmt === false)
{
   echo "Error in query preparation/execution.\n";  
   die( print_r( sqlsrv_errors(), true));  
}

$json = array();

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{    
     $json[] = $row;
}

echo json_encode($json);
...