4

我有一个简单的 MySQL 存储过程,它接受两个参数并将一行插入到表中。我可以像这样从 Zend Framework 2 执行它:

$result = $this->dbAdapter->query('CALL sp_register_user(?, ?)', array('username', 'password'));

我还可以访问从我的存储过程返回的任何结果集。

我现在想要的是从我的存储过程中获得一个输出值作为第三个参数,所以是这样的:

DELIMITER //
CREATE PROCEDURE sp_register_user(IN username VARCHAR(50), IN password VARCHAR(128), OUT code INTEGER)
NOT DETERMINISTIC
COMMENT 'Registers a user'
  BEGIN
    INSERT INTO user VALUES (username, password);
    SET code = 123;
  END //

问题是我如何从 PHP (ZF2) 访问这个输出变量。我只能通过我正在使用的 PDO 找到如何直接执行此操作的示例。此页面上的示例 4显示了如何直接通过 PDO 执行此操作。我担心的是,如果我直接使用 PDO 对象,我会失去一些抽象,因此我假设我将始终使用 PDO。

尽管如此,我还是试图让它直接与 PDO 一起工作,如下所示:

$username = 'my_username';
$password = 'my_password';
$code = 0;

$stmt = $this->dbAdapter->createStatement();
$stmt->prepare('CALL sp_register_user(?, ?, ?)');
$stmt->getResource()->bindParam(1, $username);
$stmt->getResource()->bindParam(2, $password);
$stmt->getResource()->bindParam(3, $code, \PDO::PARAM_INT, 3);
$stmt->execute();

但是,我收到一条错误消息,指出无法执行该语句。

理想的解决方案是我可以利用 ZF2 的抽象层,但欢迎和赞赏有关如何访问输出参数的任何想法。

4

1 回答 1

-1

这必须有效,因为我正在使用它

    $str = "DECLARE @Msgvar   varchar(100);DECLARE @last_id int;

    exec CallEntry_Ins $CallLoginId,".$this->usrId .",@Msg = @Msgvar OUTPUT,@LAST_ID = @last_id OUTPUT;

    SELECT  @Msgvar AS N'@Msg',@last_id AS '@LAST_ID'; ";


    $stmt = $db->prepare($str);
    $stmt->execute();
    $rtStatus = $stmt->fetchAll();



     $rtStatus[0]["@LAST_ID"] //accessing Op para
于 2013-02-28T12:10:04.200 回答