|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2007-06-28 09:22 UTC] tony2001@php.net
[2007-06-28 10:54 UTC] zolv at t-k dot pl
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Nov 01 09:00:01 2025 UTC |
Description: ------------ when i use PDO with Postgresql and use transactions with 'SET CONSTRAINTS ALL DEFERRED' PDO throws exception on inserts that works perfectly when i dont use PDO, but pg_connect and pg_query Reproduce code: --------------- example sql: create table obiekt_c4 ( id serial NOT NULL, name varchar(255), PRIMARY KEY (id) ); create table obiekt_a4 ( id serial NOT NULL, name varchar(255), obiekt_c4_id integer REFERENCES obiekt_c4( id ) DEFERRABLE, PRIMARY KEY (id) ); ---------------------- bellow code showing what i try do do: $DB = new PDO('pgsql:host=localhost;dbname=atoncd_test', 'atoncd', 'atoncd'); $DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $DB->beginTransaction(); $DB->exec( 'SET CONSTRAINTS ALL DEFERRED' ); $fields = 'id, '. 'name, '. 'obiekt_c4_id'; $inspoints = ':id, '. ':name, '. ':obiekt_c4_id'; $q = sprintf( 'INSERT INTO "%s" ( %s ) VALUES ( %s )', self::TABLE_NAME_OBIEKT_A4, $fields, $inspoints ); $stmt = $DB->prepare($q); $stmt -> bindValue( ':id', 1, PDO::PARAM_INT ); $stmt -> bindValue( ':name', 'my id is 1', PDO::PARAM_STR ); $stmt -> bindValue( ':obiekt_c4_id', 999, PDO::PARAM_INT ); $stmt -> execute(); $DB->commit(); Expected result: ---------------- Exception should be thrown on '$DB->commit()' Actual result: -------------- Exception is thrown on '$stmt -> execute()', so '$DB->exec( 'SET CONSTRAINTS ALL DEFERRED' );' doesnt work :(