2015-05-29 19 views
0

我試圖找到一種方式來追加...添加SET語句中的Yii 1.1.16的QueryBuilder

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

我想你不需要任何'預先選擇'或'選擇前'屬性。

我想你只需要在你的SELECT查詢之前用你的SET命令運行一個查詢。

我已經與foreign_key_checks變量測試,這是結果:

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

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

上第二SHOW VARIABLES命令結果:

// 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命令結果所以我明白這應該也適用於你的ca SE。

但是請首先確保您的SQL語法是有效的,請在Yii中使用它之前,從命令行或MySQL客戶端進行測試。

我認爲你的語法是錯誤的,但我不能在本地測試它,因爲我的服務器版本沒有在版本5.7.4中添加的max_statement_time變量。