我最近学会了使用Zend框架。我做了一个简单的CRUD应用程序。但现在我想将现有的数据库用于更复杂的应用程序,我想知道如何在Model中调用存储过程,如何发送参数,如何读取结果并将其存储在PHP中的数组中。请。感谢任何形式的帮助:)
发布于 2012-12-05 19:57:25
比尔的回答很好。出于完整性考虑,如果您遇到以下情况:
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()
和execute()
来代替query()
。在我的Zend_Db配置中,从pdo_mysql
切换到mysqli
终于让我的工作正常了。我从下面的SO问题中找到了这个信息:
发布于 2017-05-18 21:25:28
$db = Zend_Db_Table::getDefaultAdapter();
$stmt = $db->query("CALL procedure()");
$data = $stmt->fetchAll();
发布于 2018-03-13 18:52:55
如果有人正在使用Zend\Db
查找ZendFramework 2
\ Zend Expressive
:
使用createStatement()
方法还有另一种方法可以做到这一点。
// 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()
}
https://stackoverflow.com/questions/1303912
复制相似问题