2011-09-04 53 views
0

我想使用Zend_Db的独立COS Zend框架是太多我的项目,但我是新有了它, 是正确的做到这一点:Zend_Db的独立

$ pdoParams =阵列(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_Db_Table_Abstract如果我没有使用完整的zend框架, 或者比较好的例子是使用这个:

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

我想要的是在我的引导PHP页面中设置一个pdo/mysql连接,并且能够在任何类中获得该数据库实例,而无需启动新的连接来执行查询,但我不知道如何使用该功能Zend_Db_Table_Abstract或Zend_Db_Select对象使用注册表要是Zend_Registry ::集(“将对DBAdapter”,$ DB)或不 非常感谢

+0

请参阅http://stackoverflow.com/questions/4840941/zend-db-without-zend-framework/4841608#4841608 – atherdon

回答

0

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()或其他方法。