1

我在我的一个项目中使用 Zend_Db。现在我遇到了问题,在代码执行期间,Zend_Db_Adapter_Abstract 中的变量 $_db 突然为空。(由 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
4

2 回答 2

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

于 2009-09-30T16:56:34.043 回答
0

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

找出发生了什么。毕竟,它是开源的!

于 2009-09-29T16:34:42.587 回答