je bent je dus nog steeds een hoop ellende op de hals aan het halen, omdat je niet wilt doen:
SELECT *, CONCAT(account_id, '.', id) FROM orders
danwel in PHP een functie aanroepen om die 2 samen te voegen.
Dat zou al kunnen met
<?php echo $order->geef_ordernummer(); ?>
waarbij jouw object $order dan een functie kent
public function geef_ordernummer()
{
return $this->account_id . '.' . $this->id;
}
ja: het is mogelijk om direct bij de insert je afgeleide data ook in je tabel te krijgen.
maar soms komt dat met een hoop extra werk.
Je bent nu al een dag bezig hiermee, terwijl de recht-toe-recht-aan oplossing heel simpel te maken is.
En daarbij ook flexibel blijft voor het geval je ooit bedenkt dat in het ordernummer dat je toont ook nog het jaartal moet staan of dat je in plaats van de punt een streepje wilt hebben in je weergave.
[size=xsmall]Toevoeging op 04/02/2021 17:28:16:[/size]
en wat betreft je transactie: probeer anders te committen voor je de select query uitvoert (waarbij je eigenlijk vooraf al wist wat daar in kwam te staan, want dat zet je net in de 2 query's ervoor in je database
Klopt, vanwege een check die ik uitvoer wil ik het op deze manier doen, daarnaast heb ik nog nooit met transacties gewerkt dus vind ik het ook wel leuk te leren hoe dat werkt. Kan in de toekomst misschien weer handig zijn.
"en wat betreft je transactie: probeer anders te committen voor je de select query uitvoert (waarbij je eigenlijk vooraf al wist wat daar in kwam te staan, want dat zet je net in de 2 query's ervoor in je database"
Maar wat als twee mensen tegelijkertijd een order erin schieten, en dit script moet het last inserted id ophalen, kan dat dat geen potentiële problemen opleveren wanneer die select query niet ook in de transactie staat?
For LAST_INSERT_ID(), the most recently generated ID is maintained in the server on a per-connection basis. It is not changed by another client. It is not even changed if you update another AUTO_INCREMENT column with a nonmagic value (that is, a value that is not NULL and not 0). Using LAST_INSERT_ID() and AUTO_INCREMENT columns simultaneously from multiple clients is perfectly valid. Each client will receive the last inserted ID for the last statement that client executed.
For LAST_INSERT_ID(), the most recently generated ID is maintained in the server on a per-connection basis. It is not changed by another client. It is not even changed if you update another AUTO_INCREMENT column with a nonmagic value (that is, a value that is not NULL and not 0). Using LAST_INSERT_ID() and AUTO_INCREMENT columns simultaneously from multiple clients is perfectly valid. Each client will receive the last inserted ID for the last statement that client executed.
Ah oke dat wist ik niet. Ik dacht dat hij het last inserted id van de hele tabel pakte. Dan kan ik de SELECT query inderdaad buiten de commit zetten.
?Onbekende gebruiker
05-02-2021 17:03
gewijzigd op 05-02-2021 17:04
Achja, dat is ook zo met last_insert_id(). Ik had alleen gemist dat het met multi_query() ging om een functie van mysqli. (de code $conn = new mysqli; had geholpen)
Als ik in de handleiding kijk zie ik dat multi_query() uit zichzelf geen transacties uitvoert. De functie multi_query() voert alleen meerdere queries achter elkaar uit, waarbij je ongebruikte resultaten moet flushen voordat je query() weer kunt gebruiken. Je maak het iets gecompliceerder dan nodig.
Je kunt losse queries uitvoeren met mysqli::query(), zelfs een transactie starten met 'START TRANSACTION'. De AUTO_INCREMENT waarde kan je ook weer inlezen met mysqli::$insert_id, en hergebruiken in een volgende mysqli::query(). Dat lijkt mij overzichtelijker.