【问题标题】:Executing SQL Stored Procedures with Input and Output parameters使用输入和输出参数执行 SQL 存储过程
【发布时间】:2012-03-16 16:26:32
【问题描述】:

我对存储过程和 PDO 库非常陌生,所以请放轻松。我正在尝试使用 PDO 函数执行存储过程并检索记录集以及输出参数。我应该使用哪个函数,需要哪些参数?

如果我想使用如下示例的函数执行基本语句,我应该使用什么 PDO 方法?例如

$mssql = new mssql;

$mssql->sql('stored_procedure()');
$mssql->sql('SELECT * FROM [test]');

我希望函数根据语句类型返回正确的结果。这可能吗?

更新

以防万一我没有说得很清楚,“mssql”类使用 PDO 类来执行查询。目前我正在使用:

$PDO->prepare();
$PDO->exec();

【问题讨论】:

    标签: php mysql sql stored-procedures pdo


    【解决方案1】:

    上网查了一下,发现其实使用PDO的prepare、bindParam、execute方法很简单。

    使用我的类的存储过程示例:

    $mssql->bind_params = array(
        'BatchNum' => array(
            'value' => 'SS000008'
        ),
        'RecCount' => array(
            'value' => 0,
            'type' => PDO::PARAM_INT,
            'length' => 8
        )
    );
    $mssql->sql("{CALL sp_Batch_Sales(@paramOne=:paramOne,@paramTwo=:paramTwo)}");
    

    这被转换为:

    $query = $PDO->prepare({CALL sp_Batch_Sales(@paramOne=:paramOne,@paramTwo=:paramTwo)});
    $query->bindParam(':paramOne',$returned_parameters['paramOne']);
    $query->bindParam(':paramTwo',$returned_parameters['paramTwo'],PDO::PARAM_INT,8);
    $query->execute();
    

    然后可以使用以下方法检索记录集:

    do{
        // Get the results
        $results = $query->fetchAll(PDO::FETCH_ASSOC);
    
        // Only place the results into the array if they exist
        if(!empty($results)){
            $data[$i]['results'] = $results;
        }
    
        // Set the number of rows in the result array
        $data[$i]['rows'] = $query->rowCount();
    
        // Increment i
        $i++;
    }while($query->nextRowset());
    

    并且输入输出参数可以使用数组来检索:

    $returned_parameters
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多