访问的MySQL存储过程输出Zend框架2(Accessing MySQL stored proce

2019-07-18 10:57发布

我有一个简单的MySQL存储过程,它需要两个参数和插入行的表。 我可以从Zend框架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的抽象层,但在如何访问输出参数的任何想法,欢迎和赞赏。

Answer 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


文章来源: Accessing MySQL stored procedure output in Zend Framework 2