我最近已经学会了使用Zend Framework。我做了一个简单的CRUD应用程序。但是现在我想为现有的数据库使用更复杂的应用程序,我想知道如何在模型中调用存储过程,如何发送参数,如何读取结果并将它们存储在PHP中的数组中。请。我赞赏任何形式的帮助:)如何使用Zend Framework在MySql数据库中使用存储过程?
回答
这不是太难。这里有一个MySQL存储过程的实例与IN
参数,OUT
参数和结果集:
CREATE PROCEDURE MyProc(IN i INTEGER, OUT o INTEGER)
BEGIN
SELECT i+10 INTO o;
SELECT i, o;
END
您可以用query()
方法调用该方法,并传递一个参数:
$stmt = $db->query("CALL MyProc(?, @output)", array(25));
print_r($stmt->fetchAll());
诀窍是MySQL存储过程可能会返回多个结果集(如果该过程有多个SELECT
查询)。因此,在执行另一个SQL查询之前,API必须通过所有结果集。否则,您会收到“命令不同步”错误。
如果使用PDO_MYSQL适配器:
while ($stmt->nextRowset()) { }
如果可用MySQLi适配器,你会发现,Zend_Db_Statement_Mysqli
没有实现nextRowset()
,所以你要调用内部的mysqli连接对象:
while ($db->getConnection()->next_result()) { }
一旦你明确的结果集,你可以运行随后的SQL查询,例如,以获取过程的OUT
参数的值:
$stmt = $db->query("SELECT @output");
print_r($stmt->fetchAll());
我还没有测试除MySQL以外的其他品牌的数据库调用存储过程。 – 2009-08-20 06:54:17
谢谢比尔..我会尽快尝试:) – l2mt 2009-08-21 04:18:07
来自比尔的很好回答。只是为了完整性,如果遇到:
SQLSTATE[HY000]: General error: 2053
当使用这种方法来得到你的程序的结果集,请检查你的论点。我重构了一个方法,并将NULL作为参数传递给过程,因为我使用的变量超出了范围。有一次,我解决了这个愚蠢的错误问题走了(被另一个所取代):
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other
unbuffered queries are active. Consider using PDOStatement::fetchAll().
我使用$stmt->fetchAll()
虽然。我改用prepare()
和代替query()
。在我的Zend_Db配置文件中从pdo_mysql
切换到mysqli
终于为我工作了。我发现从以下SO问题这样的信息:
$db = Zend_Db_Table::getDefaultAdapter();
$stmt = $db->query("CALL procedure()");
$data = $stmt->fetchAll();
欢迎来到StackOverflow。为了提供一个很好的答案,你应该用你提供的代码写一个解释。 – filipst 2017-05-18 13:48:16
- 1. 在Zend Framework中调用MYSQL存储函数(非存储过程)
- 2. 如何在MySql数据库中调用多个存储过程
- 3. 使用Zend Framework调用多个存储过程
- 4. 如何使用javascript将数据存储到mysql数据库中?
- 5. 使用MySQL和PHP将数据存储在MySQL数据库中
- 6. 想要使用zend Framework存储会话
- 7. 如何使用PHP和MySQL在MySQL数据库中存储数组数据?
- 8. 如何在使用QuantumDB的Zend Studio中查看存储过程
- 9. 如何使用PHP在MySQL数据库中存储日期?
- 10. 如何使用php存储图像在mysql数据库中
- 11. 使用EF6和Mysql数据库存储过程映射
- 12. 使用CSV文件填充Mysql数据库的存储过程
- 13. ASP.NET - 使用Oracle 9i数据库/数据库存储过程
- 14. 在delphi中使用存储过程在数据库中存储图像
- 15. 如何从phpMyAdmin的数据库使用存储过程
- 16. 如何使用存储过程轮询数据库?
- 17. 如何使用H2数据库创建存储过程?
- 18. 如何使用存储过程更新数据库字段表?
- 19. 如何使用ZEND FRAMEWORK的类库?
- 20. 如何在mysql中使用while循环调用存储过程
- 21. 使用Callable语句在数据库中插入存储过程
- 22. 使用存储过程在数据库中加入4个表?
- 23. 在数据库目标上的NLog中使用存储过程
- 24. 如何使用存储过程获取Entity Framework中的身份?
- 25. 如何使用php将图像存储到MYSQL数据库中
- 26. 如何在Zend Framework中配置和访问MySQL数据库?
- 27. 如何使用Zend Framework连接到MSSQL数据库?
- 28. 使用sails.js在mysql中存储数据
- 29. 在存储过程中使用CONCAT和MySQL数据库的语法问题
- 30. 如何使用数据存储库
如果你想GoDaddy的托管MySQL数据库中使用存储过程,检查是否您可以与数据库备份一起备份。根据我的经验,他们不允许备份存储过程。我不能接受使用它们。 – 2014-12-23 03:05:42