【问题标题】:zend_db standalonezend_db 独立
【发布时间】:2011-09-04 06:38:20
【问题描述】:

我想使用 zend_db 独立 cos zend 框架对我的项目来说太多了,但我是新手, 这样做是否正确:

$pdoParams = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;');

    $params = array(
        'host' => 'localhost',
        'username' => 'ss_fraat',
        'password' => 'jos10',
        'dbname' => '_a2hDB',
        'driver_options' => $pdoParams
    );

    try {
        $db = Zend_Db::factory('PDO_MYSQL', $params);
        //set default adapter
        Zend_Db_Table_Abstract::setDefaultAdapter($db);
    } catch (Exception $e) {
        exit($e->getMessage());
    }

    //save Db in registry for later use
    Zend_Registry::set('dbAdapter', $db);

然后在任何班级都这样做:

$db = Zend_Registry::get('db');
/** quote to avoid sql injection */
$date = $db->quote('1980-01-01');
$sql = 'SELECT * FROM product WHERE name = ' . $date;
$result = $db->query($sql);
$db->query(); //run a query

我真的需要这样做

Zend_Db_Table_Abstract::setDefaultAdapter($db);

我从一个网站得到这个代码, 如果我不使用完整的 zend 框架,是否有必要使用 Zend_Db_Table_Abstract, 或者最好使用这个:

$db = Zend_Db::factory( ...options... ); $select = new Zend_Db_Select($db);

我想要的是在我的引导 php 页面中设置一个 pdo/mysql 连接,并且能够在任何类中获取该数据库实例,而无需启动新的连接来执行查询,但我不确定如何使用 Zend_Db_Table_Abstract或 Zend_Db_Select 是否使用注册表 Zend_Registry::set('dbAdapter', $db) 非常感谢

【问题讨论】:

标签: zend-db


【解决方案1】:

Zend_Db_Table_Abstract 的目的是让您可以基于表数据网关设计模式创建自己的模型类。该模式的想法是您有一个类,它封装了与表交互所需的所有 sql。因此假设您将为每个表创建扩展 Zend_Db_Table_Abstract 的模型类。如果你打算这样做,那么你需要在你的 setup/bootstrap 中调用 Zend_Db_Table_Abstract::setDefaultAdapter($db)。 ZF 的最新版本提供了一种快速获取基本功能的方法,而无需通过实例化 Zend_Db_Table 来创建自定义类定义:

$userTable = new Zend_Db_Table('users');

总之,这些都与框架的 MVC 部分无关,尽管有些人选择使用 Zend_db 作为数据库连接和模型的基础,而不是使用像 Doctrine 或 Propel 这样功能更全面的 ORM。

您提供的其他代码只是说明您也不需要使用 Zend_Db_Table_Abstract ——您可以简单地设置 Zend_Db_Adapter 的实例并使用该实例调用 query() 或其其他方法。

【讨论】:

    猜你喜欢
    • 2014-06-05
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    相关资源
    最近更新 更多