Ik heb een mysql stransaction waarbij ik verschillende inserts pleeg. Slechts 1 insert heeft een auto_increment op het id. De overige zijn koppeltabellen of updates. Nu wil ik de id ophalen van de van de insert met auto_increment. Maar ik krijg steeds 0 terwijl de transaction verder wel goed uitgevoerd word. Hieronder de code:
<?php
$conn = new mysqli(DB_HOST,DB_USER,DB_PASSWORD, DB_NAME);
if ($conn === FALSE)
{
die("Connection failed: " . $conn->connect_error);
}
$return = FALSE;
try
{
$conn->autocommit(FALSE);
$sql = "
INSERT
facturen
SET
datum = NOW(),
organisatie = '" . $oOrganisatie->id . "',
naam_organisatie = '" . $oOrganisatie->organisatie . "',
contactpersoon = '" . $oOrganisatie->contactpersoon . "';
";
$res = $conn->query($sql);
if ($res === FALSE)
{
throw new Exception('Wrong SQL: ' . $sql . ' Error: ' . $conn->error);
}
if (is_array($aEvenement))
{
foreach ($aEvenement as $oEvenement)
{
$sql = "
UPDATE
evenementen
SET
gefactureerd = 1
WHERE
id = " . $oEvenement->id . ";";
$res = $conn->query($sql);
if ($res === FALSE)
{
throw new Exception('Wrong SQL: ' . $sql . ' Error: ' . $conn->error);
}
$sql = "
INSERT
factuur_evenementen
SET
evenement = " . $oEvenement->id . ",
factuur = LAST_INSERT_ID();
";
$res = $conn->query($sql);
if ($res === FALSE)
{
throw new Exception('Wrong SQL: ' . $sql . ' Error: ' . $conn->error);
}
}
}
$conn->commit();
echo $conn->insert_id;
exit;
}
catch(Exception $e)
{
echo 'Transaction failed: ' . $e->getMessage();
$conn->rollback();
}
finally
{
$conn->close();
}
return $return;
?>
Wat doe ik fout waardoor het mis gaat? Ik zit er al een paar uur blind op te staren.
Alle data is data die reeds in de database staat in andere tabellen. Er komt dus geen ongefilterde menselijke input aan te pas aan dit stuk van de code.
EDIT: extra info
2.222 views