alex
(Alexwd59)
1
在yii shell里创建model时遇到奇怪的错误,如果在db中我设置了'charset'=>'UTF8',就会出现
Quote
exception 'CDbException' with message 'CDbConnection failed to open the DB connection: SQLSTATE[42601]: Syntax error: 7 错误: 语法错误 在 "$1" 或附近的
LINE 1: SET NAMES $1
^' in /var/framework/db/CDbConnection.php:248
一旦取消charset就连接正常
yii 1.07 postgresql 8.3.7 php 5.2.6
'db'=>array(
'class'=>'CDbConnection',
'connectionString'=>'pgsql:host=localhost;dbname=mydb',
'username'=>'myname',
'password'=>'mypass',
'charset'=>'UTF8',
),
qiang
(Qiang Xue)
2
这说明你的pgsql不支持绑定动态参数(比较奇怪,因为pgsql通常是没这个问题的)。
alex
(Alexwd59)
3
已经找到原因了,是因为在Postgresql中SET NAMES 后的参数需要用引号或单引号标识为字符串。
格式为:SET NAMES ‘value’;(http://www.postgresq…/multibyte.html)
将framework/db/CDbConnection.php中的301行从
$stmt=$pdo->prepare('SET NAMES ?');
改为
$stmt=$pdo->prepare('SET NAMES "?"');
就好了,可能是由于postgresql的格式检查比较严格的原因?
感谢Qiang
qiang
(Qiang Xue)
4
这样改的确能解决问题(实际上我已经在svn里这样改了)。
但你这里的问题是没法绑定参数。同样的配置我在其它服务器上是可以的。
所以我估计你以后还会碰到类似的参数绑定问题。
alex
(Alexwd59)
5
刚才测试了一下,参数绑定也可以用,真怪,我再观察观察,谢谢啦