Goede avond,


Voor data te updaten in de database heb ik eerst informatie nodig die al in de database zit.
Ik wil dit in een transactie stoppen.


<?php
//De id en new_data word aangeleverd door een AJAX call.
$id		 =  $_POST['id'];
$newdata =  $_POST['new_data'];

$mysqli->begin_transaction();

$mysqli->query("UPDATE details SET manage='true' WHERE id=$id'");
$mysqli->query("UPDATE details SET manage_value='$newdata' WHERE id=$id");

$mysqli->commit();
$mysqli->close();
?>


In de tabel details kolom color kunnen de waardes red, yellow of blue staan en die waarde wil ik hebben voor het updaten van de data.
Deze waarde wil ik in een statement kunnen gebruiken alvorens de update.

Dus het plaatje zou moeten worden


<?php
//De id en new_data word aangeleverd door een AJAX call.
$id		 =  $_POST['id'];
$newdata =  $_POST['new_data'];

$mysqli->begin_transaction();

//SELECT color FROM details...
//result van bovenstaand

//if(color == 'blue'){$color = blue;}elseif(color == 'red'){$color = red;}else{$color = yellow;}

$mysqli->query("UPDATE details SET manage='true' WHERE id=$id'");
$mysqli->query("UPDATE details SET manage_value='$newdata' WHERE id=$id");
$mysqli->query("UPDATE details SET team='$color' WHERE id=$id");

$mysqli->commit();
$mysqli->close();
?>


Kan het bovenstaande zoals ik wil in een transactie plaatsvinden?
@Adoptive Solution, bedankt voor je reactie. Ik kom er nog niet helemaal uit :S.

<?php
//De id en new_data word aangeleverd door een AJAX call.
$id = $_POST['id'];
$newdata = $_POST['new_data'];

$mysqli->begin_transaction();

//DEZE LIJN HEB IK NOG TOEGEVOEGD maar dan?
$mysqli->query("SELECT color FROM details WHERE id=$id FOR UPDATE");


//if(color == 'blue'){$color = blue;}elseif(color == 'red'){$color = red;}else{$color = yellow;}

$mysqli->query("UPDATE details SET manage='true' WHERE id=$id'");
$mysqli->query("UPDATE details SET manage_value='$newdata' WHERE id=$id");
$mysqli->query("UPDATE details SET team='$color' WHERE id=$id");

$mysqli->commit();
$mysqli->close();
?>
Waarom niet 1 UPDATE query? :/

Wat is er mis met:
UPDATE details SET
manage = '...',
manage_value = '...',
team = '...'
WHERE id = '...'


FOR UPDATE zorgt voor een lock op een record.

Ik zou de DATA-delen wel escapen, ook weet ik niet of een textuele waarde "true" nou zoveel doet, waarom geen 0 of 1?

Om transacties te kunnen gebruiken heb je wel de InnoDB database engine nodig, ik ga er vanuit dat je deze gebruikt?

Waar loop je nu nog op vast? Lees anders het volgende verhaal eens.
Hoi Thomas,


Ik heb even gekeken naar het type database en dat is MyISAM
Dan zal ik dus gebruik moeten maken losse queries?


<?php
$get_color = "SELECT color FROM details WHERE is=$id";

$result	= mysqli_query($connection, $get_color);

while($row = mysqli_fetch_assoc($result)){	
	$color = $row['color'];
}

$update_manage 			= "UPDATE details SET manage='true' WHERE id=$id"; 
mysqli_query($connection, $update_manage);
$update_manage_value	= "UPDATE details SET manage_value='$newdata' WHERE id=$id";
mysqli_query($connection, $update_manage_value);

if($color == 'blue'){
	$color_number = 1;
}elseif($color == 'yellow'){
	$color_number = 2;
}else{
		$color_number = 3;
}
$add_team "INSERT INTO (id, team) VALUES ($id, $color_number)";
mysqli_query($connection, $add_team);
?>
Waarom pas je die niet aan naar InnoDB?
Indien je een echte relationele database wilt hebben voor (uitgebreide) administratieve systemen dan verdient InnoDB waarschijnlijk de voorkeur, maar dan moet je ook echt relaties tussen tabellen aanleggen anders hangt alles nog steeds als los zand aan elkaar een heeft het "relationele" deel geen meerwaarde.

De bovenstaande UPDATEs kun je echter al als enkele UPDATE-query opstellen zoals ik in mijn voorbeeld aangaf. Een enkele query is in principe al atomair (ondeelbaar) dus daar heb je niet altijd een transactie voor nodig.

Reageren