Ik gebruik nogal wat tabellen in de database.
Bij het registreren worden meerdere tabellen gevuld.
Ik gebruik nu:
$last_id = $conn->insert_id;
Op grond daarvan doe ik aantal inserts in tabellen met de betreffende ID als referentie.
Nu dacht ik gelezen te hebben dat deze mogelijkheid in PHP 7 kwam te vervallen.
Maar is er een (veilige) mogelijkheid om dit anders te regelen?
Ik heb een account bij provider. Die verzorgt ook PHP, etc. (Hensel)
Zit nu op PHP 5.6.
Ik gebruik al jaren gewoon mijn kladblokje. (Of een wat luxere versie)
Dan begrijp ik teniminste wat er gebeurt.
Als ik wat met PHP moet testen gaat dat gewoon via FTP naar de site toe in map.
Ik weet dat er volop software is, maar is gewoon hobby voor me (ben 2 x 32).
Maar gaat goed zo.
Ik krijg alles nog voor elkaar wat ik wens.
En anders is er dit mooie forum nog.
En leer toch het beste door te testen waar iets fout gaat.
En soms ontdek ik dat bij een volgende versie wat verkeerd gaat.
Als alles in principe functioneert dan loop ik het nog eens door.
Dan moet alles eruit wat specifiek mysql is.
En zo is er wel meer.
Het ging dus niet specifiek over "insert id" functionaliteit, maar het feit dat je je bedient van een mysql_-functie. Het lijkt mij ook niet verstandig om mysql_-functies en mysql[color=#ff0000]i[/color]_-functies door elkaar te gebruiken. Je zult dus in 1x over moeten van de mysql-extensie naar de mysqli-extensie. Deze overstap was een stuk vloeiender geweest als je een wrapper-class had voor mysql-functies. Het enige wat je dat hoefde te doen was het veranderen van de implementatie van die wrapper class, in plaats van alle instanties van mysql_-aanroepen te search-and-replace-en. Als je nu slim ben schrijf je nu wel een wrapper class zodat je de volgende keer niet weer voor hetzelfde probleem staat.
Ben van Velzen op 13/05/2016 23:57:41
Wat wel belangrijk is, is dat je geen queries uitvoert tussen je INSERT en het opvragen van de zojuist opgehoogde autoincrement.
Dit kun je niet altijd afdwingen (denk aan verschillende users/threads die dezelfde informatie bekijken). Daartoe is het zaak dat je een batch wijzigingen altijd in een transactie zet met bijbehorende FOR UPDATE toevoegingen om relevante tabellen/kolommen tijdelijk te locken. Dat is de enige manier om op elk moment consistentie in je data af te dwingen.
Overigens is het opvragen van insert id's thread specifiek geloof ik. Dus als Jantje en Pietje allebei iets toevoegen en er direct opgevraagd wordt welk id het toegevoegde item bevat krijgen Jantje en Pietje allebei braaf hun eigen insert id terug. Neemt niet weg dat er op andere plekken wel dingen door elkaar kunnen lopen. Daarvoor zijn transacties.
Als je dit na wilt spelen in een script houd er dan rekening mee dat als je "verschillende" connecties (connectie-objecten) gebruikt dat deze mogelijk dezelfde fysieke connectie gebruiken indien de argumenten voor het maken van een connectie hetzelfde zijn.