在Yii 1.1.16 QueryBuilder

时间:2015-05-29 10:28:22

标签: php mysql select yii

我正试图找到一种方法来追加......

SET STATEMENT max_statement_time=1000 FOR

...在Yii QueryBuilder SQL调用的开头,例如:

$Query = Yii::app()->db->createCommand();
$Query->select = "*";
$Query->from = "table";
$Query->where = "id = 1";

添加到$Query->select会创建损坏的SQL:

$Query->select = "SET STATEMENT max_statement_time=1000 FOR " . "*";
...
SELECT SET STATEMENT max_statement_time=1000 FOR * // Syntax error

并且似乎没有“预先选择”或“之前选择”属性:

$Query->beforeSelect = "SET STATEMENT max_statement_time=1000 FOR";

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我认为您不需要任何“预先选择”或“之前选择”属性。

我认为您只需要在SELECT查询之前使用SET命令运行查询。

我正在使用foreign_key_checks变量进行测试,这就是结果:

// Disable foreign_key_checks
Yii::app()->db->createCommand("SET foreign_key_checks = 0")->execute();

// Check that variable is being kept for this request
CVarDumper::dump(Yii::app()->db->createCommand("
SHOW VARIABLES LIKE 'foreign_key_checks'
")->queryRow(), 10, true);

// Enable foreign_key_checks
Yii::app()->db->createCommand("SET foreign_key_checks = 1")->execute();

// Variable is ON again
CVarDumper::dump(Yii::app()->db->createCommand("
SHOW VARIABLES LIKE 'foreign_key_checks'
")->queryRow(), 10, true);

第一个SHOW VARIABLES命令的结果:

array
(
    'Variable_name' => 'foreign_key_checks'
    'Value' => 'OFF'
)

第二个SHOW VARIABLES命令的结果:

array
(
    'Variable_name' => 'foreign_key_checks'
    'Value' => 'ON'
)

所以我知道这也适用于你的情况。

但请首先确保您的SQL语法有效,请在Yii中使用之前从命令行或MySQL客户端进行测试。

我认为您的语法错误但我无法在本地测试,因为我的服务器版本没有在5.7.4版本中添加的max_statement_time变量。