2

PHPSymfonyプロジェクトをMsSQLデータベースに接続するためにDBLibPDOドライバーを使用しています(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 

トランザクションをサポートする他のドライバーを探していましたが、残念ながら、プロジェクトがLAMPで動作しているため、SQLServer用のPHP用MicrosoftDrivers3.0以外は見つかりませんでした。これは私の問題には当てはまりません。環境

4

2 に答える 2

2

長く続くバグがありました:https ://bugs.php.net/bug.php?id = 38955

SqlServドライバーは、Windows上で問題なく動作します。Linuxの場合、ここのphpドキュメント、特にここに記載されているように、ODBC経由で(FreeTDSを使用して)接続する必要があります。

于 2012-10-19T07:58:42.870 に答える
1

PHP 5.4を使用できる場合は、トランザクションサポートが追加されましたPDODblib

または、ファイルを5.4ソースから5.3にコピーしてpdodblibコンパイルするか(ほぼ同じです)、手動のトランザクションクエリを実行することもできます。

于 2012-10-22T13:14:30.223 に答える