2015-12-02 41 views
0

我使用SQLSRV驅動程序與PDO在Windows環境中連接MSSQL Server。這是我試圖運行命令行cron作業一樣SQLServer事務與PHP PDO在命令行中使用sqlsrv不起作用

enter image description here

我得到致命錯誤,一旦說There is no active transaction作爲我的數據庫對象嘗試提交事務相當奇怪的問題。下面是我的源代碼

try { 
    $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $this->dbh->beginTransaction(); 
    INSERT STATEMENT 1 
    INSERT STATEMENT 2 
    .................. 
    .................. 
    $this->dbh->commit(); 

} catch (Exception $e) { 
    $this->dbh->rollBack(); 
} 

爲了檢查該交易是否是工作或沒有,我只是把beginTransaction()線,如果這樣

if ($this->dbh->beginTransaction()) { 
    echo "Database transaction started"; 
else { 
    echo "Not started"; 
} 

條件這是PDO對象看怎麼樣,當我打印$這個 - >胸徑

PDO Object 
(
) 

則控制進入到其他部分,並顯示Not started。奇怪的是,我的cron文件位於我的項目下,它正在使用應用程序其他部分(管理員和前端)使用的相同數據庫連接文件。在同一個cron文件中,SELECT和UPDATE工作正常。

我觀察到只有單個數據庫實例正在創建。數據庫事務也適用於管理員和前端區域。

我無法從Google獲得幫助,無法理解數據庫事務爲何不能用於命令行執行。

+0

顯示連接對象($這個 - >胸徑) – RomanPerekhrest

+0

我已經展示如何PDO對象看起來像更新我的問題。它在數據庫事務正常工作的其他應用程序區域(管理員和前端)看起來是一樣的。 – neeraj

+0

https://github.com/yiisoft/yii/pull/1307/files – RomanPerekhrest

回答

0

試試這個:

$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$this->dbh->beginTransaction(); 
try { 
    INSERT STATEMENT 1 
    INSERT STATEMENT 2 
    .................. 
    .................. 
    $this->dbh->commit(); 
} catch (Exception $e) { 
    $this->dbh->rollBack(); 
}