Ik probeer via Mysqli een transaction te starten met meerdere queries die afhankelijk zijn van elkaar.
De tweede statement is echter false en dit komt waarschijnlijk omdat "@last_sale_guid" niet beschikbaar is vanuit de eerste statement.
Ik heb na voorbeelden gezocht, echter zijn deze enkel met een enkele query i.c.m. binding en transaction.
Heeft iemand een idee of dit functioneel kan worden en zo ja, hoe?
(ps. ik heb dit wel werkend gekregen met de multi_query functie, echter kan ik hiermee niet standaard variablen binden en hiermee SQL injection tegengaan)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| //Let op: zwaar versimpelde versie van de transaction: $value = 5; $mysqli -> autocommit(FALSE); $mysqli -> begin_transaction(MYSQLI_TRANS_START_READ_WRITE); $stmt = $mysqli -> prepare('SELECT @last_sale_guid := (guid + 1) AS last_sale_guid FROM sale ORDER BY id DESC LIMIT 1;'); $stmt -> execute(); //Onderstaande $stmt retourneert false omdat "@last_sale_guid" waarschijnlijk niet beschikbaar is vanuit de vorige query $stmt = $mysqli -> prepare('SELECT CASE WHEN @last_sale_guid IS NULL THEN @last_sale_guid := 1 ELSE @last_sale_guid := @last_sale_guid END AS last_sale_guid;'); $stmt -> execute(); $stmt = $mysqli -> prepare('INSERT INTO sale (guid, establishment_id) VALUES(@last_sale_guid, ?);'); $stmt -> bind_param('i', $value); $stmt -> execute(); $mysqli -> commit(); |
De tweede statement is echter false en dit komt waarschijnlijk omdat "@last_sale_guid" niet beschikbaar is vanuit de eerste statement.
Ik heb na voorbeelden gezocht, echter zijn deze enkel met een enkele query i.c.m. binding en transaction.
Heeft iemand een idee of dit functioneel kan worden en zo ja, hoe?
(ps. ik heb dit wel werkend gekregen met de multi_query functie, echter kan ik hiermee niet standaard variablen binden en hiermee SQL injection tegengaan)