简体   繁体   中英

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM