2009-06-09 62 views
1

我目前使用Zend_Db类来管理我的数据库连接。 我有几个关于它的问题。正确使用Zend_Db

  • 它是否巧妙地管理开放连接? (例如,我有一个连接已经打开,是否知道要使用它?还是必须在打开新连接之前不断检查它们是否已打开连接?)
  • 我使用以下代码取结果(FETCH_OBJ方式获取):

    $final = $result->fetchAll(); 

    return $final[0]->first_name; 

出于某种原因,fetchRow不起作用 - 所以我不断用使用fetchall,甚至当我只有一个结果(如搜索WHERE id= number id是一个PK)

我的问题是 - 当我使用fetchAll而不是fetchRow时牺牲多少时间/内存,即使只有资源ULT?

  • 我创建了下面的类来管理我的连接:

    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.对不起,这里的代码格式出来马虎。

回答

3

很多问题!

是否管理打开连接 巧妙?

是的,当你运行你的第一个查询,连接被创建,并且后续查询使用相同的连接。这是真的如果你重复使用相同的Zend_Db适配器。我通常使用合适的词汇提供给我的整个应用程序:

$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 

上面的代码通常会在应用程序引导。我不打算扩展Zend_Db类来初始化它的实例。我相信关键区别在于查询运行限于1行,并且返回的对象是Zend_Db_Table_Row而不是Zend_Db_Table_Rowset(与行数组类似),并且执行速度并不会很慢。

fetchRow应该没问题,因此发布一些代码不工作,因为可能在某处出现了错误。

0

除了dcaunt的回答是: 使用fetchall返回数组或Zend_Db_Talbe_Rowset - 这取决于如果执行$zendDbTableModel->fetchAll()$dbAdapter->fetchAll() 也是一样fetchRow()上。如果您未能使fetchRow适用于型号,则更容易使用$model->getAdapter()->fetchRow($sqlString);