pdo驱动程序不支持linux上的事务

时间:2012-10-19 07:18:05

标签: php sql-server transactions pdo

我一直在使用DBLib PDO驱动程序将我的PHP Symfony项目与MsSQL数据库连接(我只需要查询2个表,Propel设置为连接MySQL数据库,这是主要的)

不幸的是,当遇到需要使用交易的时候我遇到了问题。

以下代码

$pdo = new PDO('dblib:host=IP;dbname=DBNAME', 'login', 'password');
$pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo -> beginTransaction();
$sql = "INSERT INTO DBNAME (Fields) VALUES (Values) ";
$query = $pdo -> prepare($sql);
$query -> execute();
$sql = "SELECT Field FROM DBNAME";
$query = $pdo -> prepare($sql);
$query -> execute();
$dane1 = $query -> fetchAll();
$pdo -> rollBack();
$sql = "SELECT Field FROM DBNAME";
$query = $pdo -> prepare($sql);
$query -> execute();
$dane2 = $query -> fetchAll();

我收到了这样的错误:

PDOException Object ( [message:protected] => This driver doesn't support transactions [string:Exception:private] => [code:protected] => 0 

我一直在寻找支持该交易的任何其他驱动程序,但不幸的是,我找不到除Microsoft Drivers 3.0 for PHP for SQL Server之外的任何内容,这不适用于我的问题,因为我的项目正在开发LAMP环境

2 个答案:

答案 0 :(得分:2)

有一个持久的错误:https://bugs.php.net/bug.php?id=38955

SqlServ驱动程序在Windows上运行得非常完美。对于Linux,您应该通过ODBC(使用FreeTDS)连接,如php docs hereespecially here中所述。

答案 1 :(得分:1)

如果您可以使用PHP 5.4,则为PDODblib

添加了事务支持

或者,您可以将pdodblib文件从5.4源复制到5.3并编译(它们几乎完全相同)或执行手动事务查询。