从PHP页面调用SQL Server存储过程,并接收字符串输出参数

从PHP页面调用SQL Server存储过程,并接收字符串输出参数,php,sql-server,stored-procedures,Php,Sql Server,Stored Procedures,我试图从PHP页面调用SQL Server存储过程,并让存储过程在输出参数中返回字符串值 我已经有很多PHP页面成功地调用了SQL Server存储过程,这些过程返回一个整数值。我还有一个PHP页面,它执行一个简单的SELECT语句并返回一个字符串值。但是现在我有了一个存储的proc,它从PHP页面接受一个输入参数,然后从几个表中选择一些数据,并通过将它与一些静态文本连接起来创建一个全新的字符串。我想将连接的字符串返回到调用PHP页面 这是我的存储过程: CREATE PROCEDURE CHE

我试图从PHP页面调用SQL Server存储过程,并让存储过程在输出参数中返回字符串值

我已经有很多PHP页面成功地调用了SQL Server存储过程,这些过程返回一个整数值。我还有一个PHP页面,它执行一个简单的SELECT语句并返回一个字符串值。但是现在我有了一个存储的proc,它从PHP页面接受一个输入参数,然后从几个表中选择一些数据,并通过将它与一些静态文本连接起来创建一个全新的字符串。我想将连接的字符串返回到调用PHP页面

这是我的存储过程:

CREATE PROCEDURE CHECK_SPONSOR_CODE
    @cr_code            VARCHAR(50),
    @sponsor            VARCHAR(255) OUTPUT
AS
    DECLARE @xrowcount      INT;
BEGIN
    SET NOCOUNT ON;

    BEGIN
        SELECT @xrowcount = count(custom0)
        FROM person_table
        WHERE custom0 = @cr_code 
        AND   custom5 = 'Yes';

        IF (@xrowcount = 0) 
        BEGIN           
            SELECT @sponsor = 'Error (Unknown Code) - the Sponsor Code provided is invalid. Please check that you have entered the correct code.';
        END

        IF (@xrowcount > 1) 
        BEGIN           
            SELECT @sponsor = 'Error (Multiple Sponsors) - the Sponsor Code provided is invalid. Please contact the System Administrator.';
        END

        IF (@xrowcount = 1) 
        BEGIN           
            SELECT 
                @sponsor = 'Success! Your Sponsor is: ' + p.fname + ' ' + p.lname + ' (' + c.name + ')'
            FROM 
                person_table p INNER JOIN
                company_table c ON p.company_id = c.id
            WHERE 
                p.custom0 = @cr_code 
            AND p.custom5 = 'Yes';
        END 
    END
END
这是我的PHP页面(check_code.PHP):

但这只是产生了以下错误:

警告:sqlsrv_num_rows()希望参数1是资源,布尔值在第23行的D:\Apache2.2\htdocs\check_code2.php中给出 遇到错误,请与支持部门联系


关于如何从存储过程中取回字符串,我有什么想法吗?

所以我从来没有想到如何用存储过程解决这个问题(如果有人愿意提供如何解决这个问题的指导,我将不胜感激);但我确实用了一种稍微不同的方法解决了这个问题。以下是我的PHP代码:

<?php
    function check_sponsor_code() {
        //$sponsor_code = $_GET['crcode'];
        $sponsor_code = "test_cr_code";
        $sponsor = "";

        $serverName = "server\dbname, 31433";
        $connectionInfo = array( "Database"=>"dbname", "UID"=>"username", "PWD"=>"password");
        $conn = sqlsrv_connect( $serverName, $connectionInfo);


        $query = "SELECT 
                    p.fname + ' ' + p.lname + ' (' + c.name2 + ')' AS sponsor
                FROM 
                    person_table p INNER JOIN
                    company_table c ON p.company_id = c.id
                WHERE 
                    p.custom5 = 'Yes'
                AND p.custom0 = ?";

        if(! $conn ){
            die('Could not connect: ');
        }

        $params = array($sponsor_code);

        $stmt = sqlsrv_query($conn, $query, $params, array( "Scrollable" => 'static' ));

        if ($stmt) {
            $row_count = sqlsrv_num_rows($stmt);
            //echo "Row count: ".$row_count."<br/>";
            if ($row_count == 0) {
                $sponsor = "Error (Unknown Code) - the Sponsor Code provided is invalid. Please check that you have entered the correct code.";
            } elseif ($row_count > 1) {
                $sponsor = "Error (Multiple Sponsors) - the Sponsor Code provided is invalid. Please contact the System Administrator.";
            } elseif ($row_count == 1){
                while($row = sqlsrv_fetch_array($stmt)){
                    $sponsor = "Success! Your Headway DNA Sponsor is: ".($row['sponsor']);
                }
            } else {
                $sponsor = "An unknown error occurred.";
            }
        } else {
            echo "Error verifying record: Invalid Sponsor Code...<br/>";
        }
        sqlsrv_close($conn);

        echo $sponsor;
    }

    check_sponsor_code();
?>

这意味着如果请求返回布尔值,则该请求尚未实现。
    $params = array(
        array($crcode, SQLSRV_PARAM_IN),
        array($sponsor, SQLSRV_PARAM_INOUT)
        );

    $stmt = sqlsrv_query($conn, $query, $params);
    $row_count = sqlsrv_num_rows( $stmt );

    if ($stmt) {
        sqlsrv_next_result($stmt);
        echo $sponsor;
    } else {
        echo "Error encountered, please contact support";
    }
<?php
    function check_sponsor_code() {
        //$sponsor_code = $_GET['crcode'];
        $sponsor_code = "test_cr_code";
        $sponsor = "";

        $serverName = "server\dbname, 31433";
        $connectionInfo = array( "Database"=>"dbname", "UID"=>"username", "PWD"=>"password");
        $conn = sqlsrv_connect( $serverName, $connectionInfo);


        $query = "SELECT 
                    p.fname + ' ' + p.lname + ' (' + c.name2 + ')' AS sponsor
                FROM 
                    person_table p INNER JOIN
                    company_table c ON p.company_id = c.id
                WHERE 
                    p.custom5 = 'Yes'
                AND p.custom0 = ?";

        if(! $conn ){
            die('Could not connect: ');
        }

        $params = array($sponsor_code);

        $stmt = sqlsrv_query($conn, $query, $params, array( "Scrollable" => 'static' ));

        if ($stmt) {
            $row_count = sqlsrv_num_rows($stmt);
            //echo "Row count: ".$row_count."<br/>";
            if ($row_count == 0) {
                $sponsor = "Error (Unknown Code) - the Sponsor Code provided is invalid. Please check that you have entered the correct code.";
            } elseif ($row_count > 1) {
                $sponsor = "Error (Multiple Sponsors) - the Sponsor Code provided is invalid. Please contact the System Administrator.";
            } elseif ($row_count == 1){
                while($row = sqlsrv_fetch_array($stmt)){
                    $sponsor = "Success! Your Headway DNA Sponsor is: ".($row['sponsor']);
                }
            } else {
                $sponsor = "An unknown error occurred.";
            }
        } else {
            echo "Error verifying record: Invalid Sponsor Code...<br/>";
        }
        sqlsrv_close($conn);

        echo $sponsor;
    }

    check_sponsor_code();
?>