为我的 Yii 应用程序做一个小组件。
代码
$connection = Yii::app()->getComponent('db');
$sql = 'SELECT * FROM {{settings}}';
$command = $connection->createCommand($sql);
引发错误
告诉我出了什么问题。我不能使用大括号来转义表名?
谢谢
更新:
看来这是 Yii Query Bulduer 的错误。
如果我使用这个配置
'db'=>array(
'connectionString' => '...',
'emulatePrepare' => ...,
'username' => '...',
'password' => '...',
'charset' => '...',
'tablePrefix' => ''
),
注意空的 tablePrefix — 一切正常。
删除这个键我得到了上面描述的问题。但我不需要表前缀。我只想使用一个可以使用前缀的组件,而不仅仅是在我的应用程序中。
最佳答案
抱歉,我刚刚意识到您的更新实际上说的是什么。
是的,当然可以:您已将 tablePrefix
定义为空字符串(并且,因为我已经 pointed out ,自 v.1.1.6 以来,空字符串前缀一直是 supported)。
如果您没有定义 tablePrefix
,那么将它与 null
进行比较将是正确的(正如我之前也指出的, CDbCommand::setText()
replaces non-null prefixes ):
if($this->_connection->tablePrefix!==null && $value!='')
$this->_text=preg_replace('/{{(.*?)}}/',$this->_connection->tablePrefix.'\1',$value);
因此,您必须自己替换大括号,或者将
tablePrefix
显式设置为空字符串。如果您无法控制配置文件,但想要确保设置了 tablePrefix
,您可以手动覆盖它:if (!isset($connection->tablePrefix)) $connection->tablePrefix = '';
关于php - CDbConnection 和大括号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23581123/