我正试图找到一种方法来追加......
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";
有什么想法吗?
答案 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变量。