SQLServer事务在命令行中使用sqlsrv时无法使用PHP PDO

时间:2015-12-02 07:15:22

标签: php pdo command-line transactions sqlsrv

我正在使用SQLSRV驱动程序与PDO在Windows环境中连接MSSQL Server。这是一个非常奇怪的问题,我试图从命令行运行一个cron作业,如

enter image description here

一旦我的db对象尝试提交事务,我就会发出致命错误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";
}

当我打印$ this-> dbh

时,这就是pdo对象的样子
PDO Object
(
)

然后控制转到else部分并显示Not started。奇怪的是,我的cron文件位于我的项目下,该文件正在使用应用程序的其他部分(管理员和前端)使用的相同数据库连接文件。在同一个cron文件中,SELECT和UPDATE工作正常。

我发现只创建了一个数据库实例。数据库事务也适用于管理员和前端区域。

我无法从Google那里得到任何帮助来理解为什么数据库事务不能用于命令行执行。

1 个答案:

答案 0 :(得分: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();
}