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