首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Zend Framework中使用MySql数据库中的存储过程?

如何在Zend Framework中使用MySql数据库中的存储过程?
EN

Stack Overflow用户
提问于 2009-08-20 04:11:36
回答 3查看 15.5K关注 0票数 18

我最近学会了使用Zend框架。我做了一个简单的CRUD应用程序。但现在我想将现有的数据库用于更复杂的应用程序,我想知道如何在Model中调用存储过程,如何发送参数,如何读取结果并将其存储在PHP中的数组中。请。感谢任何形式的帮助:)

EN

回答 3

Stack Overflow用户

发布于 2012-12-05 19:57:25

比尔的回答很好。出于完整性考虑,如果您遇到以下情况:

代码语言:javascript
复制
SQLSTATE[HY000]: General error: 2053

使用此方法从过程中获取结果集时,请检查参数。我重构了一个方法,并将NULL作为参数传递给过程,因为我使用的变量超出了作用域。一旦我修复了这个愚蠢的错误,问题就消失了(被另一个问题取代):

代码语言:javascript
复制
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other 
unbuffered queries are active.  Consider using PDOStatement::fetchAll().

不过我使用的是$stmt->fetchAll()。我转而使用prepare()execute()来代替query()。在我的Zend_Db配置中,从pdo_mysql切换到mysqli终于让我的工作正常了。我从下面的SO问题中找到了这个信息:

Call Multiple Stored Procedures with the Zend Framework

票数 1
EN

Stack Overflow用户

发布于 2017-05-18 21:25:28

代码语言:javascript
复制
    $db = Zend_Db_Table::getDefaultAdapter();    
    $stmt = $db->query("CALL procedure()");
    $data = $stmt->fetchAll();
票数 0
EN

Stack Overflow用户

发布于 2018-03-13 18:52:55

如果有人正在使用Zend\Db查找ZendFramework 2 \ Zend Expressive

使用createStatement()方法还有另一种方法可以做到这一点。

代码语言:javascript
复制
// prepare create statement from adapter
$stmt = $this->getAdapter()->createStatement();

$stmt->prepare('CALL myproc("myVal")');
// execute sql query
$records = $stmt->execute();
// manipulate results
if ($records instanceof ResultInterface && $records->isQueryResult()) {
    $resultSet = new ResultSet;
    $resultSet->initialize($records);
    // return records if found
    if (count($resultSet)) {
       // return array of result set
       return $resultSet->toArray();
    }
   // if no records found
   return array()

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1303912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档