为我的 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/

10-09 22:29