Linux+mysql5.1.36+php5.3上打开数据库连接错误

这个服务器是生产环境,在测试环境上(windows+mysql5.1+php5.3)上没有问题。以下是错误日志:

2009/09/27 11:15:02 [error] [exception.CDbException] exception ‘CDbException’ with message ‘CDbConnection 无法开启数据库连线: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘?’ at line 1’ in /var/www/paip/paipai/framework/db/CDbConnection.php:248

Stack trace:

#0 /var/www/paip/paipai/framework/db/CDbConnection.php(223): CDbConnection->open()

#1 /var/www/paip/paipai/framework/db/CDbConnection.php(202): CDbConnection->setActive(true)

#2 /var/www/paip/paipai/framework/base/CModule.php(353): CDbConnection->init()

#3 /var/www/paip/paipai/framework/base/CApplication.php(338): CModule->getComponent(‘db’)

#4 /var/www/paip/paipai/framework/db/ar/CActiveRecord.php(839): CApplication->getDb()

#5 /var/www/paip/paipai/framework/db/ar/CActiveRecord.php(2153): CActiveRecord->getDbConnection()

#6 /var/www/paip/paipai/framework/db/ar/CActiveRecord.php(635): CActiveRecordMetaData->__construct(Object(DynamicData))

#7 /var/www/paip/paipai/protected/models/DynamicData.php(23): CActiveRecord::model(‘DynamicData’)

#8 /var/www/paip/paipai/protected/controllers/DynamicDataController.php(177): DynamicData::model()

#9 /var/www/paip/paipai/framework/web/actions/CInlineAction.php(32): DynamicDataController->actionList()

#10 /var/www/paip/paipai/framework/web/CController.php(300): CInlineAction->run()

#11 /var/www/paip/paipai/framework/web/filters/CFilterChain.php(129): CController->runAction(Object(CInlineAction))

#12 /var/www/paip/paipai/framework/web/filters/CFilter.php(41): CFilterChain->run()

#13 /var/www/paip/paipai/framework/web/CController.php(952): CFilter->filter(Object(CFilterChain))

#14 /var/www/paip/paipai/framework/web/filters/CInlineFilter.php(59): CController->filterAccessControl(Object(CFilterChain))

#15 /var/www/paip/paipai/framework/web/filters/CFilterChain.php(126): CInlineFilter->filter(Object(CFilterChain))

#16 /var/www/paip/paipai/framework/web/CController.php(283): CFilterChain->run()

#17 /var/www/paip/paipai/framework/web/CController.php(257): CController->runActionWithFilters(Object(CInlineAction), Array)

#18 /var/www/paip/paipai/framework/web/CWebApplication.php(332): CController->run(‘list’)

#19 /var/www/paip/paipai/framework/web/CWebApplication.php(120): CWebApplication->runController(‘dynamicData/lis…’)

#20 /var/www/paip/paipai/framework/base/CApplication.php(133): CWebApplication->processRequest()

#21 /var/www/paip/paipai/index.php(11): CApplication->run()

有人遇到过这个问题吗?

当我注释掉initConnection方法中的以下两行后,连接成功:

CDbConnection:

protected function initConnection($pdo)


{


	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


	if($this->emulatePrepare && constant('PDO::ATTR_EMULATE_PREPARES'))


		$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,true);


	if($this->charset!==null)


	{


		if(strcasecmp($pdo->getAttribute(PDO::ATTR_DRIVER_NAME),'sqlite'))


		{

// $stmt=$pdo->prepare(‘SET NAMES ?’);

// $stmt->execute(array($this->charset));

		}


	}


}

请问强哥这个是yii的bug吗?我的是1.0.7版

是数据库版本的问题吧,低版本的mysql不支持SET NAMES。

此问题已通过升级yii到1.0.9解决.以下是1.0.9这段代码的修改:

protected function initConnection($pdo)

{


	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


	if($this->emulatePrepare && constant('PDO::ATTR_EMULATE_PREPARES'))


		$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,true);


	if($this->charset!==null)


	{


		if(strcasecmp($pdo->getAttribute(PDO::ATTR_DRIVER_NAME),'sqlite'))


			[color="#FF0000"]$pdo->exec('SET NAMES '.$pdo->quote($this->charset));[/color]


	}


}