运行BLOG实例时有异常报出(暂时搁置)

运行BLOG的时候有时会出现异常. 对Yii还不了解. 麻烦看下问题是在哪里.

绝大多数情况下是好的. 本想记下URL地址, 可怎么点击, 问题又好像消失了.

补充: 数据库和数据都是好的. 下面的异常在很小的机率下会出现



2009/03/08 00:39:07 [error] [exception.CDbException] exception 'CDbException' with message 'The table "Comment" for active record class "Comment" cannot be found in the database.' in protectedlibraryYiidbarCActiveRecord.php:1762


Stack trace:


#0 protectedlibraryYiidbarCActiveRecord.php(525): CActiveRecordMetaData->__construct(Object(Comment))


#1 protectedlibraryYiidbarCActiveRecord.php(538): CActiveRecord::model('Comment')


#2 protectedlibraryYiidbarCActiveRecord.php(353): CActiveRecord->getMetaData()


#3 protectedcontrollersPostController.php(234): CActiveRecord->__construct()


#4 protectedcontrollersPostController.php(82): PostController->newComment(Object(Post))


#5 protectedlibraryYiiwebactionsCInlineAction.php(32): PostController->actionShow()


#6 protectedlibraryYiiwebCController.php(265): CInlineAction->run()


#7 protectedlibraryYiiwebfiltersCFilterChain.php(128): CController->runAction(Object(CInlineAction))


#8 protectedlibraryYiiwebfiltersCFilter.php(41): CFilterChain->run()


#9 protectedlibraryYiiwebCController.php(885): CFilter->filter(Object(CFilterChain))


#10 protectedlibraryYiiwebfiltersCInlineFilter.php(59): CController->filterAccessControl(Object(CFilterChain))


#11 protectedlibraryYiiwebfiltersCFilterChain.php(125): CInlineFilter->filter(Object(CFilterChain))


#12 protectedlibraryYiiwebCController.php(248): CFilterChain->run()


#13 protectedlibraryYiiwebCController.php(225): CController->runActionWithFilters(Object(CInlineAction), Array)


#14 protectedlibraryYiiwebCWebApplication.php(335): CController->run('show')


#15 protectedlibraryYiiwebCWebApplication.php(123): CWebApplication->runController('post/show')


#16 protectedlibraryYiibaseCApplication.php(170): CWebApplication->processRequest()


#17 index.php(11): CApplication->run()


#18 {main} REQUEST_URI=/post/1.html


2009/03/08 00:39:13 [error] [exception.CDbException] exception 'CDbException' with message 'The table "User" for active record class "User" cannot be found in the database.' in protectedlibraryYiidbarCActiveRecord.php:1762


Stack trace:


#0 protectedlibraryYiidbarCActiveRecord.php(525): CActiveRecordMetaData->__construct(Object(User))


#1 protectedlibraryYiidbarCActiveFinder.php(298): CActiveRecord::model('User')


#2 protectedlibraryYiidbarCActiveFinder.php(210): CJoinElement->__construct(Object(CActiveFinder), Object(CBelongsToRelation), Object(CJoinElement), 1)


#3 protectedlibraryYiidbarCActiveFinder.php(51): CActiveFinder->buildJoinTree(Object(CJoinElement), 'author')


#4 protectedlibraryYiidbarCActiveRecord.php(463): CActiveFinder->__construct(Object(Post), 'author')


#5 protectedlibraryYiidbarCActiveRecord.php(388): CActiveRecord->getRelated('author')


#6 protectedviewspost_post.php(9): CActiveRecord->__get('author')


#7 protectedlibraryYiiwebCBaseController.php(119): require('D:xampphtdocs...')


#8 protectedlibraryYiiwebCBaseController.php(88): CBaseController->renderInternal('D:xampphtdocs...', Array, true)


#9 protectedlibraryYiiwebCController.php(652): CBaseController->renderFile('D:xampphtdocs...', Array, true)


#10 protectedviewspostshow.php(3): CController->renderPartial('_post', Array)


#11 protectedlibraryYiiwebCBaseController.php(119): require('D:xampphtdocs...')


#12 protectedlibraryYiiwebCBaseController.php(88): CBaseController->renderInternal('D:xampphtdocs...', Array, true)


#13 protectedlibraryYiiwebCController.php(652): CBaseController->renderFile('D:xampphtdocs...', Array, true)


#14 protectedlibraryYiiwebCController.php(591): CController->renderPartial('show', Array, true)


#15 protectedcontrollersPostController.php(87): CController->render('show', Array)


#16 protectedlibraryYiiwebactionsCInlineAction.php(32): PostController->actionShow()


#17 protectedlibraryYiiwebCController.php(265): CInlineAction->run()


#18 protectedlibraryYiiwebfiltersCFilterChain.php(128): CController->runAction(Object(CInlineAction))


#19 protectedlibraryYiiwebfiltersCFilter.php(41): CFilterChain->run()


#20 protectedlibraryYiiwebCController.php(885): CFilter->filter(Object(CFilterChain))


#21 protectedlibraryYiiwebfiltersCInlineFilter.php(59): CController->filterAccessControl(Object(CFilterChain))


#22 protectedlibraryYiiwebfiltersCFilterChain.php(125): CInlineFilter->filter(Object(CFilterChain))


#23 protectedlibraryYiiwebCController.php(248): CFilterChain->run()


#24 protectedlibraryYiiwebCController.php(225): CController->runActionWithFilters(Object(CInlineAction), Array)


#25 protectedlibraryYiiwebCWebApplication.php(335): CController->run('show')


#26 protectedlibraryYiiwebCWebApplication.php(123): CWebApplication->runController('post/show')


#27 protectedlibraryYiibaseCApplication.php(170): CWebApplication->processRequest()


#28 index.php(11): CApplication->run()


#29 {main} REQUEST_URI=/post/1.html





把环境 配置什么都说一下!

操作系统XP, 使用XAMPP1.7.0的包

有没有修改什么?

看看requerments是否支持你的数据库。

这个异常每次都出现么?如果只是偶尔出现,那就比较奇怪了,应该是数据库驱动或PHP本身的问题。

偶尔出现的。

有一个值得怀疑的地方就是我创建数据库SQL里的表的名字都是首字母大小的, 用 SQLyog操作时, 却只能显示小写。

不一定什么时候能出来。 比较怪异的一件事。

Quote

有没有修改什么?

看看requerments是否支持你的数据库。

绝大多数情况都是正常的。 只是很偶尔的才会出现。

谢谢你的关注!

Quote

这个异常每次都出现么?如果只是偶尔出现,那就比较奇怪了,应该是数据库驱动或PHP本身的问题。

谢谢强哥的回答!  我想也是这个原因。

这几天多次出现了这个问题. 希望大家能找到最根本的问题. 这样在给客户上线的时候也就知道什么地方会出问题了

我所有的 tableName() 都返回了数据库中的真实表名, 和Model类的名字是不一样的(真实表名比较长)

你改过代码了?你的Comment模型的tableName()是怎么样的?

示例:



class Comment extends CActiveRecord


{


        public function tableName()


        {


	        return '12345_comment';


        }


        //... other functions


}


这不可能啊。为什么错误信息里是说Comment表找不到呢?下面是相关报错的地方:



<?php


		$tableName=$model->tableName();


		if(($table=$model->getDbConnection()->getSchema()->getTable($tableName))===null)


			throw new CDbException(Yii::t('yii','The table "{table}" for active record class "{class}" cannot be found in the database.',


				array('{class}'=>get_class($model),'{table}'=>$tableName)));


我跟踪了这个问题, 也了解了异常在这里报出。只是百思不得其解。 再次刷新的时候就又恢复正常了

问题就在于,这段代码很显然就是取你定义的表名。为什么出错的时候却是报"Comment"?这是很奇怪的。

不好意思, 强哥, 让你产生误解了。

像我写的那个 表名为12345_comment的报出的就是:

exception 'CDbException' with message 'The table "12345_comment for active record class "Comment"