[ Cyberghost @ 25.09.2009. 13:46 ] @
Da li je moguce uraditi u nekoliko upita nad bazom i da se svi nadju u transakciji, primer:

Code:

odbc_autocommit(false);

odbc_exec($conn, $query1);
odbc_exec($conn, $query2);
odbc_exec($conn, $query3);
odbc_exec($conn, $query4);

if(!odbc_commit($conn))
{
      odbc_rollback($conn);
}


Ako bilo koji od njih padne(prekine u izvrsavanju) da se uradi rollback,
jer sva 4 upita moraju da se izvrse inace sistem pada u vodu.

Hvala
[ Nikola Poša @ 25.09.2009. 14:21 ] @
Pa na dobrom si putu, samo ne treba da radiš commit, sve dok ne isproveravaš da li su svi upiti prošli, npr.:
Code:

$conn = odbc_connect($dsn, $user, $pass);

odbc_autocommit($conn, false);

$errors = 0;

if (!odbc_exec($conn, $query1)) { $errors++; } 
if (!odbc_exec($conn, $query2)) { $errors++; } 
if (!odbc_exec($conn, $query3)) { $errors++; } 
if (!odbc_exec($conn, $query4)) { $errors++; } 

if ($errors == 0) {
      odbc_commit($conn);
}
else {
      odbc_rollback($conn);
}
[ Cyberghost @ 25.09.2009. 20:23 ] @
Druze hvala, tvoja resenje je sigurnije.

P.S. Dovbar ti je sajt, samo napred.
[ Cyberghost @ 09.10.2009. 10:26 ] @
Citat:
Nikola Poša:
Code:

$conn = odbc_connect($dsn, $user, $pass);

odbc_autocommit($conn, false);

$errors = 0;

if (!odbc_exec($conn, $query1)) { $errors++; } 
if (!odbc_exec($conn, $query2)) { $errors++; } 
if (!odbc_exec($conn, $query3)) { $errors++; } 
if (!odbc_exec($conn, $query4)) { $errors++; } 

if ($errors == 0) {
      odbc_commit($conn);
}
else {
      odbc_rollback($conn);
}


Ovako funkcionise kada radim Javu i mySQL, ali PHP i ODBC kombinacija ne radi.
Komanda
Code:

odbc_autocommit($conn, false);

Uvek vraca TRUE upiti se 'commit-uju' jer je uvek autocommit(TRUE), jednostavno ne mogu da
ga nateram da mi uradi autocommit = FALSE.
Da li jos neko koristi transakcije u PHP-u, jer bez njih necu moci, u suprotnom prelazim na
drugi alat. U Javi ovo radi kao podmazano !
[ Nikola Poša @ 09.10.2009. 13:30 ] @
Znam da je sa ODBC-om uvek bilo nekih bagova, ne znam zašto si se uopšte odlučio da ideš s njim... Kao alternativu, probaj nešto sa PDO-om: http://us3.php.net/manual/en/pdo.transactions.php
[ Cyberghost @ 09.10.2009. 15:47 ] @
U pitanju je Advantage Database Server, koji cak ima i svoj driver za PHP ali ja nisam uspeo da ga napravim,
pa sam krenuo sa ODBC-om.
Probacu prvo sa PDO da vidim da li ide, pa cemo videti dalje.
[ Cyberghost @ 09.10.2009. 18:34 ] @
PDO radi posao !

Potrebno je u PHP.ini odkomentarisati linije za PDO drajvere za zeljenu bazu podataka.
Ja sam to uradio samo za pdo_odbc.dll
Primer:
Code:

<?php
/* Konekcija na bazu preko ODBC drajvera */
$dsn = 'odbc:MojDSN';
$user = 'AdsSys';
$password = '';

try {
   $conn = new PDO($dsn, $user, $password);     
} catch (PDOException $e) {
   echo 'Connection failed: ' . $e->getMessage();
}

try{
         $conn->beginTransaction();      
         $sql1 = "Insert into klijenti(kl_sifra, kl_sifkom, kl_tip) values('101', '000017', '1')";    
         $sql2 = "Insert into klijenti(kl_sifra, kl_sifkom, kl_tip) values('102', '000018', '2')";    

         $conn->query($sql1);
         $conn->query($sql2); 
  
         $conn->commit();
}
catch (Exception $e) {
  print 'Transakcija nije izvrsena!';
  $conn->rollBack();
}


@Nikola, hvala na sugestijama

Srecno PHP-ovci