我有一个简单的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的抽象层,但在如何访问输出参数的任何想法,欢迎和赞赏。