2

我一直在使用 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环境

4

2 回答 2

2

有一个长期存在的错误:https ://bugs.php.net/bug.php?id=38955

SqlServ 驱动程序确实可以在 Windows 上完美运行。对于 Linux,您应该通过 ODBC(使用 FreeTDS)进行连接,如此处的 php 文档中所述,尤其是此处

于 2012-10-19T07:58:42.870 回答
1

如果您可以使用 PHP 5.4,则添加了事务支持PDODblib

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

于 2012-10-22T13:14:30.223 回答