Undefined Index: Comment (Yii 1.1.13)

Hi,

since I upgrade yii 1.1.12 to 1.1.13, my app crash.

I have 4 DB conections: 1xOracle 10g, 3x MySQL 5.2 and 1xMySQL 4.1, used by several models.

Using 1.1.12 my App works fine. Using 1.1.13, I get "Undefined index: Comment" only with models related MySQL 4.

But I haven’t any field “Comment”… Perhaps it is referered to Comment field attribute.




PHP notice

Undefined index: Comment

/var/tvaprivado/yii/framework/db/schema/mysql/CMysqlSchema.php(199)


187      * @return CDbColumnSchema normalized column metadata

188      */

189     protected function createColumn($column)

190     {

191         $c=new CMysqlColumnSchema;

192         $c->name=$column['Field'];

193         $c->rawName=$this->quoteColumnName($c->name);

194         $c->allowNull=$column['Null']==='YES';

195         $c->isPrimaryKey=strpos($column['Key'],'PRI')!==false;

196         $c->isForeignKey=false;

197         $c->init($column['Type'],$column['Default']);

198         $c->autoIncrement=strpos(strtolower($column['Extra']),'auto_increment')!==false;

199         $c->comment=$column['Comment']; <---CRASH

200 

201         return $c;

202     }

203 

204     /**

205      * @return float server version.

206      */

207     protected function getServerVersion()

208     {

209         $version=$this->getDbConnection()->getAttribute(PDO::ATTR_SERVER_VERSION);

210         $digits=array();

211         preg_match('/(\d+)\.(\d+)\.(\d+)/', $version, $digits);


Stack Trace

#0 /var/tvaprivado/yii/framework/db/schema/mysql/CMysqlSchema.php(167): CMysqlSchema->createColumn(array("Field" => "email", "Type" => "varchar(80)", "Null" => "", "Key" => "PRI", ...))

#1 /var/tvaprivado/yii/framework/db/schema/mysql/CMysqlSchema.php(119): CMysqlSchema->findColumns(CMysqlTableSchema)

#2 /var/tvaprivado/yii/framework/db/schema/CDbSchema.php(103): CMysqlSchema->loadTable("users")

#3 /var/tvaprivado/yii/framework/db/ar/CActiveRecord.php(2309): CDbSchema->getTable("users")

#4 /var/tvaprivado/yii/framework/db/ar/CActiveRecord.php(387): CActiveRecordMetaData->__construct(Users)

#5 /var/tvaprivado/yii/framework/web/CActiveDataProvider.php(74): CActiveRecord::model("Users")

#6 /var/tvaprivado/francisco/protected/controllers/UsersController.php(251): CActiveDataProvider->__construct("Users", array("criteria" => array("order" => "email DESC"), "pagination" => array("pageSize" => 10)))


246                 'order'=>'email DESC',

247             ),

248             'pagination'=>array(

249                 'pageSize'=>10,

250             ),

251         ));

252         $this->render('index',array(

253             'dataProvider'=>$dataProvider,

254         )); // <--CRASH!

255     }

256 


#7 /var/tvaprivado/yii/framework/web/actions/CInlineAction.php(49): UsersController->actionIndex()

#8 /var/tvaprivado/yii/framework/web/CController.php(308): CInlineAction->runWithParams(array("r" => "Users"))

#9 /var/tvaprivado/yii/framework/web/filters/CFilterChain.php(133): CController->runAction(CInlineAction)

#10 /var/tvaprivado/yii/framework/web/filters/CFilter.php(40): CFilterChain->run()

#11 /var/tvaprivado/yii/framework/web/CController.php(1145): CFilter->filter(CFilterChain)

#12 /var/tvaprivado/yii/framework/web/filters/CInlineFilter.php(58): CController->filterAccessControl(CFilterChain)

#13 /var/tvaprivado/yii/framework/web/filters/CFilterChain.php(130): CInlineFilter->filter(CFilterChain)

#14 /var/tvaprivado/yii/framework/web/CController.php(291): CFilterChain->run()

#15 /var/tvaprivado/yii/framework/web/CController.php(265): CController->runActionWithFilters(CInlineAction, array("accessControl"))

#16 /var/tvaprivado/yii/framework/web/CWebApplication.php(282): CController->run("")

#17 /var/tvaprivado/yii/framework/web/CWebApplication.php(141): CWebApplication->runController("Users")

#18 /var/tvaprivado/yii/framework/base/CApplication.php(169): CWebApplication->processRequest()

#19 /var/tvaprivado/francisco/index.php(13): CApplication->run()


08 defined('YII_DEBUG') or define('YII_DEBUG',true);

09 // specify how many levels of call stack should be shown in each log message

10 defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',1);

11 

12 require_once($yii);

13 Yii::createWebApplication($config)->run();




Apache/2.2.16 (Debian 6) Yii Framework/1.1.13 PHP 5.3.3

EDIT:

I solved temporaly:




/**

         * Creates a table column.

         * @param array $column column metadata

         * @return CDbColumnSchema normalized column metadata

         */

        protected function createColumn($column)

        {

                $c=new CMysqlColumnSchema;

                $c->name=$column['Field'];

                $c->rawName=$this->quoteColumnName($c->name);

                $c->allowNull=$column['Null']==='YES';

                $c->isPrimaryKey=strpos($column['Key'],'PRI')!==false;

                $c->isForeignKey=false;

                $c->init($column['Type'],$column['Default']);

                $c->autoIncrement=strpos(strtolower($column['Extra']),'auto_increment')!==false;

                //$c->comment=$column['Comment'];

                $c->comment='';


                return $c;

        }

We added Table comment support in Yii 1.1.13 wich is Available in MySQL 5.x

As MySQL 4 is not maintained anymore, we are not testing yii on that version of MySQL.

http://dev.mysql.com/doc/refman/4.1/en/

There seems to be a different way of how the comment field is returned in MySQL 4.

Can you show the output of “'SHOW FULL COLUMNS FROM tableName;”?

The MySQL version is MySQL 4.0.24. This is the output from PHPMyAdmin of SHOW FULL COLUMNS:




Field 	 	Type 	 	Null 	Key 	Default 	Extra 	Privileges

email 	 	varchar(80) 	  	 	PRI 	  	select,insert,update,references

password 	varchar(20) 	  	  	  	 	select,insert,update,references

nombre 	 	varchar(80) 	  	  	  	 	select,insert,update,references

apellidos 	varchar(200) 	  	  	  	 	select,insert,update,references

empresa 	varchar(5) 	  	 	false 	  	select,insert,update,references

cod_cliente 	int(11) 	  	 	0 	  	select,insert,update,references

quota 	 	int(10) unsigned 	 	52428800 	select,insert,update,references



Thanks!

Thx, fixed: https://github.com/yiisoft/yii/issues/2030

Thanks CeBe!