【问题标题】:pdo driver does not suport transactions on linuxpdo 驱动程序不支持 linux 上的事务
【发布时间】:2012-10-09 18:30:35
【问题描述】:

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

【问题讨论】:

  • 你使用的是 MyISAM,还是 InnoDB,或者其他什么?
  • 对于 MySQL,我使用的是 InnoDB,但问题是根据 Microsoft SQL Server 数据库...

标签: php sql-server transactions pdo


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 在与客户进行了一番斗争之后 - 我已将 php 升级到 5.4 并且问题不复存在。谢谢:)
    猜你喜欢
    • 2014-01-28
    • 2013-09-06
    • 2012-11-02
    • 1970-01-01
    • 2021-08-22
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多