调用Prepared Statement,PHP + SQL时出错

时间:2018-05-15 01:32:47

标签: php sql prepared-statement

我正在尝试调用预准备语句并检索所需数据。准备好的声明由另一位开发人员创建,他们的指示是:<​​/ p>

declare @DeliveryC nvarchar(15), @DeliveryS  float,  @ErrMsg varchar 

EXECUTE my_prepared_statement @CustNum = 'XX', @PostCode = '2222', @Suburb = 'XX' 
,       @DeliveryCode = @DeliveryC output, @DeliverySurcharge = @DeliveryS output, @ErrMsg = @ErrMsg output

我一直收到这个错误:

  

数组([0] =&gt;数组([0] =&gt; 42000 [SQLSTATE] =&gt; 42000 [1] =&gt; 201   [code] =&gt; 201 [2] =&gt; [Microsoft] [SQL Server的ODBC驱动程序13] [SQL   服务器]过程或函数'my_prepared_statement'需要参数   “@DeliverySurcharge”,未提供。

我的PHP代码如下所示:

    $serverName = "XX"; 
    $connectionInfo = array( "Database"=>"XX", "UID"=>"XX", "PWD"=>"XX");
    $conn = sqlsrv_connect( $serverName, $connectionInfo);


    if($conn) {
        echo "Connection established";

        $sql = "{call my_prepared_statement( ?, ?, ? )}";

        $custNum = "XX";  
        $postcode = "2222";  
        $suburbname = "XX";  
        $dcode = "dcode";  
        $dsur = 0.0;  
        $emsg = "error";  
        $params = array(   
            array($custNum, SQLSRV_PARAM_IN),  
            array($postcode, SQLSRV_PARAM_IN),  
            array($suburbname, SQLSRV_PARAM_IN),  
            array(&$dcode, SQLSRV_PARAM_OUT), 
            array(&$dsur, SQLSRV_PARAM_OUT), 
            array(&$emsg, SQLSRV_PARAM_OUT) 
        ); 

        $stmt3 = sqlsrv_query( $conn, $sql, $params);

        if( $stmt3 === false )  
        {  
            echo "<br/>Error in executing statement 3.<br/>";  
            die( print_r( sqlsrv_errors(), true)); 
        }

        echo "surcharge: " . $dsur . "  ---  code: " . $dcode; 
    }
    else {
        echo "Connection could not be established";
    }

The developer who created the prepared statement has sent me through this information:

    declare @DeliveryC nvarchar(15), @DeliveryS  float,  @ErrMsg varchar 

    EXECUTE my_prepared_statement @CustNum = 'XX', @PostCode = '2222', @Suburb = 'XX' 
    ,       @DeliveryCode = @DeliveryC output, @DeliverySurcharge = @DeliveryS output, @ErrMsg = @ErrMsg output

我以前从未真正使用过这样的预处理语句,所以我有点迷失了。对不起,如果我没有解释这个。任何想法如何修复错误并获取数据?

0 个答案:

没有答案