l2m*_*2mt 18 stored-procedures zend-framework
我最近学会了使用Zend Framework.我做了一个简单的CRUD应用程序.但是现在我想使用现有的数据库来处理更复杂的应用程序,我想知道如何在模型中调用存储过程,如何发送参数,如何读取结果并将它们存储在PHP中的数组中.请.我感谢任何帮助:)
Bil*_*win 24
这不是太难.这是一个带有IN参数,OUT参数和结果集的MySQL存储过程的示例:
CREATE PROCEDURE MyProc(IN i INTEGER, OUT o INTEGER)
BEGIN
SELECT i+10 INTO o;
SELECT i, o;
END
Run Code Online (Sandbox Code Playgroud)
您可以使用该query()方法调用它,并传递一个参数:
$stmt = $db->query("CALL MyProc(?, @output)", array(25));
print_r( $stmt->fetchAll() );
Run Code Online (Sandbox Code Playgroud)
诀窍是MySQL存储过程可能会返回多个结果集(例如,如果proc有多个SELECT查询).因此,API必须先遍历所有结果集,然后才能执行另一个SQL查询.否则,您会收到" 命令不同步 "错误.
如果您使用PDO_MySQL适配器:
while ($stmt->nextRowset()) { }
Run Code Online (Sandbox Code Playgroud)
如果你使用MySQLi适配器,你会发现Zend_Db_Statement_Mysqli它没有实现nextRowset(),所以你必须调用内部mysqli连接对象:
while ($db->getConnection()->next_result()) { }
Run Code Online (Sandbox Code Playgroud)
清除结果集后,可以运行后续SQL查询,例如获取过程OUT参数的值:
$stmt = $db->query("SELECT @output");
print_r( $stmt->fetchAll() );
Run Code Online (Sandbox Code Playgroud)