Volg de onderstaande video om te zien hoe je onze site als web-app op je startscherm installeert.
Opmerking: Deze functie is mogelijk niet beschikbaar in sommige browsers.
dJeez zei:Die functies dienen enkel maar om de waarde van een autoincrement field op te halen van het laatste record dat je tijdens de huidige sessie hebt gecreëerd, ik weet zo nog niet of dat de exacte wens is? Een select max(id) from tabel zal anders ook wel volstaan, maar gebruik dat NOOIT om een nieuwe waarde voor een id te gaan bepalen.
Tot er 2 identieke IDs terugkomen omdat die op exact hetzelfde moment worden gegenereerd. Een transactie lost dat probleem overigens niet op. En neem het van mij aan : de kans dat het gebeurt is groter dan je denktkillgore zei:why not?
als dat allemaal binnen 1 transaction gebeurd is daar toch geen probleem mee me dunkt?
.MrO zei:mysql_insert_id() is de ENIGE goede manier om dit op te lossen.
Dit haalt de laatste id op die door de huidige instantie van de script is uitgevoerd op. Dus onafhankelijk van hoeveel andere gebruikers er op dat moment mee bezig zijn, je zit altijd juist!
$qSelect_berichten = mysql_query('SELECT * FROM `invoer`') or die (mysql_error());
while($aBerichten = mysql_fetch_array($qSelect_berichten))
$text = $aBerichten['id'];
In het eerste script, dus waar je de insert doet kan je - uiteraard enkel indien je ID veld een auto_increment field is - via mysql_insert_id() de waarde ophalen die laatst werd toegekend (let wel op de opmerkingen in de PHP reference, voor BIGINT kolommen mag je die functie NIET gebruiken). De waarde die je dan bekomt kan je dus uiteraard ook in je redirect gaan doorsturen als parameter naar het tweede script, of opslaan in een sessie variabele, of in een cookie zetten, ...exxhal zei:Dus ik moet het id ophalen welke is aangemaakt in mijn vorige php script ?
Ik begrijp het niet goed.
Werk ik dan met een sessie?
Het zit nu zo.
Eerst een invulform. welke gegevens plaats in de db.
Dan via een header naar een nieuwe pagina.
Kan ik dan het aangemaakte id meenemen?
.Een transactie is alleen voor queries die ofwel succesvol moeten worden uitgevoerd, ofwel helemaal ongedaan moeten gemaakt worden (denk bvb aan het klassieke overschrijving van één rekening naar een andere-probleem).killgore zei:why not?
als dat allemaal binnen 1 transaction gebeurd is daar toch geen probleem mee me dunkt?
n00bslayer zei:Een transactie is alleen voor queries die ofwel succesvol moeten worden uitgevoerd, ofwel helemaal ongedaan moeten gemaakt worden (denk bvb aan het klassieke overschrijving van één rekening naar een andere-probleem).
Als je iets wil uitvoeren dat afhankelijk is van een onveranderde tabel (tijdens het uitvoeren van deze reeks queries) gebruik je een table LOCK.
WHiSPy zei:Table lock? Zijt ge zeker dat ge dat wilt doen? Beseft ge wel wat een table lock op dat moment doet?
Elk rdbms voorziet functies hiervoor. Als je 'n auto-number/sequence definieert, dan houdt je database sowieso in 'n aparte tabel bij welke de laatst toegewezen id voor die tabel is.
en als iemand die laatst gewijzigde Id beïnvloed terwijl je zelf aan het updaten bent, zit je met foutieve data opgescheept. Kans van 1 op je weetwel, maar het zal je maar overkomen. Een exclusive die je de toegang tijdelijk ontzegt kan je overigens perfect opvangen. De kans dat je dit moet opvangen is even klein, maar dan heb je op het einde wel geen foutieve data.n00bslayer zei:Ik denk nogal multi-user de laatste tijden als iemand die laatst gewijzigde Id beïnvloed terwijl je zelf aan het updaten bent, zit je met foutieve data opgescheept. Kans van 1 op je weetwel, maar het zal je maar overkomen. Een exclusive die je de toegang tijdelijk ontzegt kan je overigens perfect opvangen. De kans dat je dit moet opvangen is even klein, maar dan heb je op het einde wel geen foutieve data.


WHiSPy zei:Als je multi-user denkt, dan wil je sowieso geen table lock veroorzaken.
De integriteit van je data is de verantwoordelijkheid van de instellingen van je rdbms en niet van je programmatuur.![]()
Je vergist je, de mysql_insert_id geeft de laatste id gegenereerd door die specifieke databaseconnectie. Dat is dus die van gebruiker A zelf.n00bslayer zei:Als ik mij niet vergis, geeft mysql_insert_id() de meest recente auto_increment weer, en zal deze functie dus de door gebruiker B laatst gegenereerde Id returnen.
ICdJeez zei:Je vergist je, de mysql_insert_id geeft de laatste id gegenereerd door die specifieke databaseconnectie. Dat is dus die van gebruiker A zelf.
weer iets bijgeleerd vandaag (buiten dat leren werken met AS 3.0 buitengewoon frustrerend is als je 2.0 gewoon bent).dJeez zei:Tot er 2 identieke IDs terugkomen omdat die op exact hetzelfde moment worden gegenereerd. Een transactie lost dat probleem overigens niet op. En neem het van mij aan : de kans dat het gebeurt is groter dan je denkt.
.