Zend_Db:适配器突然变为空!

时间:2009-09-29 10:15:05

标签: php zend-framework zend-db

我在我的一个项目中使用Zend_Db。 现在我遇到了问题,突然在代码执行期间,Zend_Db_Adapter_Abstract中的变量$ _db为null。 (由var_dump($ this)显示;在我的DbTable_xx类中。)

在脚本执行期间,似乎适配器在某处设置为null。 怎么会发生这种情况?

不幸的是,项目太复杂了,无法在这里发布一些代码......我收到此错误(在Zend_Db_Adapter_Abstract上执行find($ primary)方法时):

Fatal error: Call to a member function quoteTableAs() 
on a non-object in xxx/library/Zend/Db/Table/Abstract.php on line 1162

2 个答案:

答案 0 :(得分:1)

您可能忘记为Zend_Db_Table类设置Db适配器。

您至少可以通过以下三种方式执行此操作:

  • 为所有表设置应用程序范围的默认值:

    Zend_Db_Table_Abstract::setDefaultAdapter($db);
    
  • 指定表构造函数的适配器:

    $table = new MyTable( array('db'=>$db) );
    
  • 将适配器存储在注册表中并将其指定到表中或将其设置为默认值:

    Zend_Registry::set('my_db', $db); 
    $table = new MyTable( array('db'=>'my_db') );
    // alternatively:
    Zend_Db_Table_Abstract::setDefaultAdapter('my_db');
    

请参阅http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.constructing

答案 1 :(得分:0)

嗯,这不是太多的信息。如果你想避免猜测,我建议制作一个Zend Framework的副本,并为那些可以使用php的内置调试函数设置$ _db的方法添加一些跟踪器代码,例如:

了解发生了什么。总而言之,它是开放式的!