PHP reads just 2034 characters from the returned JSON string value from stored procedure “sp_test”. Why just 2034 characters and not more?
Using PHP Version 5.6.31 with SQL Express 2017
JavaScript
x
$query = "EXEC sp_test";
$stmt = sqlsrv_prepare($GLOBALS['connIntern'], $query);
if (!sqlsrv_execute($stmt)) {
if (($errors = sqlsrv_errors() ) != null) {
foreach ($errors as $error) {
echo "SQLSTATE: " . $error['SQLSTATE'] . "<br />";
echo "code: " . $error['code'] . "<br />";
echo "message: " . $error['message'] . "<br />";
}
}
die;
}
$array = [];
if (!empty($result)) {
while ($row = sqlsrv_fetch_array($result)) {
array_push($array, $row[0]);
}
}
return $array;
Stored Procedure “sp_test”:
JavaScript
SELECT [Tracking].[orderNumber],[Tracking].[tcpState], [Stations].[startdate],[Stations].[enddate],[Stations].[tcpState],[Stations].[name]
FROM [Tracking]
LEFT JOIN [Stations] ON [Tracking].[orderNumber] = [Stations][orderNumber]
FOR JSON AUTO
Formatted result:
JavaScript
[
{
"orderNumber": 123455,
"tcpState": 3,
"Stations": [
{
"startdate": "2011-05-06",
"enddate": "2012-09-15",
"tcpState": 3,
"name": "Roger"
},
{
"startdate": "2011-02-06",
"enddate": "2012-05-15",
"tcpState": 4,
"name": "Hans"
}
]
},
{
"orderNumber": 1566,
"tcpState": 3,
"Stations": [
{
"startdate": "2011-06-06",
"enddate": "2012-08-15",
"tcpState": "6",
"name": "Mike"
},
{
"startdate": "2011-03-06",
"enddate": "2012-03-15",
"tcpState": "6",
"name": "Tom"
}
]
}
]
Advertisement
Answer
Found the issue
JavaScript
if (!empty($result)) {
while ($row = sqlsrv_fetch_array($result)) {
array_push($array, $row[0]);
}
I thought i get the whole string in one row but i have to merge it.Like this:
JavaScript
if (!empty($result)) {
while ($row = sqlsrv_fetch_array($result)) {
array_push($array, $row);
}
}
if(count($array) > 0){
foreach ($array as $json){
$jsonPiece = $json[0];
$jsonString .= $jsonPiece;
}
}