PHP to display T-SQL statement using sqlsrv_query
Just wondering if there is anyone that can help me understand why my code is not outputting data. I have created a T-SQL query in Microsoft SQL Server 2008. The query works fine and displays all the correct data in SQL management studio. Below is how the data looks in SQL Server Management studio:
block sequence|number of ties|percent_of_q4|number of q3 ties|percent of q3 ties| quality
0 1108 11.34296 37 3.33935 1
1 1094 31.11517 66 6.032907 1
2 1109 21.633 53 4.77908 1
When I try to output the data in a simple PHP script using exactly the same query, no data is shown.
Does this happen because the sqlsrv_query does not like my query? Does sqlsrv_fetch_array not like the "IS NOT NULL"in my query? I've completely run out of ideas on what to try... Can anyone provide any advice for why this fairly simple script doesn't seem to be working? Any reply would be greatly appreciated!
If anything is unclear, please let me know.
Cheers, Neil
The PHP script is below:
<?php
/*data base connection */
$serverName = ".\SQLEXPRESS";
$connectionOptions = array("Database"=>"V6_HOLLTS479_20101015_subset",
"UID"=>"username",
"PWD" => "password");
/* Connect using Windows Authentication */
$conn = sqlsrv_connect($serverName, $connectionOptions);
/* Check whether connnection is established */
if($conn === false)
{
die(print_r(sqlsrv_errors(), true));
}
/* SQL query */
$tsql = "
DECLARE @block_size AS real
DECLARE @threshold_1 AS real
DECLARE @threshold_2 AS real
DECLARE @threshold_3 AS real
DECLARE @threshold_4 AS real
--Set variables
SET @block_size = 200.0
SET @threshold_1 = 50 -- GISCat4HighThresh
SET @threshold_2 = 75 -- GISCat3HighThresh
SET @threshold_3 = 25 -- GISCat4LowThresh
SET @threshold_4 = 50 -- GISCat3LowThresh
SELECT
sub_t.block_sequence ,
sub_t.number_of_ties,
tie_q_4.number_of_ties AS number_of_q4_ties,
(CAST(tie_q_4.number_of_ties AS real)/CAST(sub_t.number_of_ties AS real))*100.0 AS percent_of_q4_ties,
tie_q_3.number_of_ties AS number_of_q3_ties,
(CAST(tie_q_3.number_of_ties AS real)/CAST(sub_t.number_of_ties AS real))*100.0 AS percent_of_q3_ties,
--The next column shows the block quality. This is currently 4,3,1 based on the threshold rules.
CASE WHEN (
(CAST(tie_q_4.number_of_ties AS real)/CAST(sub_t.number_of_ties AS real))*100.0 > @threshold_1
OR
(CAST(tie_q_3.number_of_ties AS real)/CAST(sub_t.number_of_ties AS real))*100.0 > @threshold_2
) THEN 4
WHEN (
(CAST(tie_q_4.number_of_ties AS real)/CAST(sub_t.number_of_ties AS real))*100.0 > @threshold_3
OR
(CAST(tie_q_3.number_of_ties AS real)/CAST(sub_t.number_of_ties AS real))*100.0 > @threshold_4
) THEN 3
ELSE 1
END AS quality
FROM (
SELECT
FLOOR(CAST(image_sequence AS real)/@block_size) AS block_sequence ,
COUNT(image_sequence) AS number_of_ties
FROM database
GROUP BY
FLOOR(CAST(image_sequence AS real)/@block_size)
) AS SUB_T
LEFT JOIN (
SELECT FLOOR(CAST(image_sequence AS real)/@block_size) AS block_sequence ,
COUNT(image_sequence) AS number_of_ties
FROM database
WHERE
quality = 4
GROUP BY
FLOOR(CAST(image_sequence AS real)/@block_size)
) AS tie_q_4 ON sub_t.block_sequence = tie_q_4.block_sequence
LEFT JOIN (
SELECT
FLOOR(CAST(image_sequence AS real)/@block_size) AS block_开发者_运维知识库sequence ,
COUNT(image_sequence) AS number_of_ties
FROM database
WHERE
quality = 3
GROUP BY
FLOOR(CAST(image_sequence AS real)/@block_size)
) AS tie_q_3 ON sub_t.block_sequence = tie_q_3.block_sequence
WHERE sub_t.block_sequence IS NOT NULL
ORDER BY block_sequence
";
$result = sqlsrv_query($conn, $tsql);
$row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC);
print("<pre>");
print_r($row);
print("</pre>");
I had a similar issue, I tried all sorts and then went right back to basics. If you try
$query=sqlsrv_query($conn, $tsql);
$result=sqlsrv_fetch_array($query);
print_r($result);
Should do the trick
精彩评论