1

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

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

     $final = $result->fetchAll();

    return $final[0]->first_name;

出于某种原因,fetchRow 不起作用 - 所以我经常使用 fetchAll,即使我只有一个结果(比如 searchWHERE 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()....

这是最好的方法吗?有人有更好的主意吗?

谢谢!

ps对不起,这里的代码格式草率..

4

2 回答 2

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 应该没问题,所以发布一些不起作用的代码,因为某处可能存在错误。

于 2009-06-09T21:10:34.160 回答
0

除了 dcaunt 的回答: FetchAll 返回数组或 Zend_Db_Talbe_Rowset - 取决于您是否执行$zendDbTableModel->fetchAll()$dbAdapter->fetchAll() Same 适用于fetchRow(). 如果你不能让 fetchRow 为模型工作,它更容易使用$model->getAdapter()->fetchRow($sqlString);

于 2009-06-10T11:38:19.490 回答