我目前正在使用Zend_Db类来管理我的数据库连接。 我有几个问题。
$final = $result->fetchAll();
return $final[0]->first_name;
由于某种原因,fetchRow不起作用 - 所以我经常使用fetchAll,即使我只有一个结果(比如搜索WHERE id= number
而id是PK)
我的问题是 - 当我使用fetchAll而不是fetchRow时,我会牺牲多少时间/内存,即使只有结果?
require 'Zend/Db.php';
class dbconnect extends Zend_Db
{
function init ()
{
$params = array (......
return Zend_Db::factory ( 'PDO_MYSQL', $params );
}
}
然后我打电话
$handle = dbconnect::init
$handle->select()....
这是最好的方法吗?有没有人有更好的主意?
谢谢!
P.S。对不起,这里的代码格式很糟糕..
答案 0 :(得分:3)
很多问题!
是否管理开放连接 巧妙?
是的,当您运行第一个查询时,会创建一个连接,后续查询将使用相同的连接。如果您重用相同的Zend_Db适配器,则会出现这种情况。我通常使用Zend_Registry将它提供给我的整个应用程序:
$db = Zend_Db::factory(...) // create Db instance
Zend_Registry::set('db', $db);
//in another class or file somewhere
$db = Zend_Registry::get('db');
$db->query(...)//run a query
以上代码通常在您的应用程序 bootstrap 中。我不打算将Zend_Db类扩展为初始化和实例化。
关于fetchRow - 我认为关键的区别在于查询运行限制为1行,并且返回的对象是Zend_Db_Table_Row而不是Zend_Db_Table_Rowset(就像行数组一样),并且执行速度不会明显变慢。
fetchRow应该没问题,所以发布一些不起作用的代码,因为某处可能存在错误。
答案 1 :(得分:0)
除了dcaunt的回答:
FetchAll返回数组OR Zend_Db_Talbe_Rowset - 取决于您执行$zendDbTableModel->fetchAll()
还是$dbAdapter->fetchAll()
同样适用于fetchRow()
。如果您未能使fetchRow适用于模型,则使用$model->getAdapter()->fetchRow($sqlString);