Beste lezer,

ik heb heel even een vraagje om het command mysql_insert_id()
Ik heb begrepen dat ik hiermee de ID kon ophalen van de laatste insert query die je doet in een script.

echter als ik deze wegschrijf naar een variable dan krijg ik als antwoord 0

iemand enig idee hoe ik dit het beste kan doen ? heb deze ID namelijk nodig voor een volgende query welke bij de volgende query gebruikt moet worden.

heb al een blik geworpen op : mysql_insert_id(); maar helaas word ik daar niet veel wijzer van.

alvast bedankt voor jullie reacties

voorbeeld qeury die ik gebruik
[code]<?php
//INSERT gegevens in database
$qry3 = "INSERT INTO tablea(colluma,collumb,collumc,) VALUES('$var1','$var2','$var3')";

//Dit is het company ID
$id_qry1 = mysql_insert_id();

$qry4 = "INSERT INTO tablea(colluma,collumb,collumc,collumd) VALUES('$var1','$var2','$var3','$id_qry1')";
?>
[code]
Niels Kieviet op 19/01/2012 16:14:39

Beste Rick de Graaff,

Nee, or die moet je nooit gebruiken. Lees hoofdstuk 5 van de tutorial die ik gaf eens. Daarin wordt uitgelegd waarom je or die niet gebruiken. Ook wordt er uitgelegd hoe je wel een nette foutafhandeling bouwt.

Ook bij [php]mysql_insert_id[/php] moet je foutafhandeling toepassen. Als je op PHP.net kijkt zie je dat [php]mysql_insert_id[/php] diversen waarden kan retourneren. Wanneer er iets is fout gegaan retourneert de functie een false (Bijvoorbeeld wanneer er geen connectie aanwezig is). Dat betekend dus dat je moet controleren of de functie geen false retourneert. Wanneer dit wel het geval is mag je de volgende query niet uitvoeren.

Tot slot mag je er nooit van uit gaan of er een waarde in komt te staan. De query kan ook mislukken doordat de (My)SQL server plat is, of bedenk maar een andere reden. Dan gaat de zin: `want ik weet van me eigen scripts dat er wel een waarde in komt te staan` niet op.

Niels Kieviet



Als je aan het developen ben kan je makkelijk een die gebruiken, want anders gaat hij gewoon verder met het bijvoorbeeld inserten in de database.

Als je de website o.i.d oplevert dan weet je 100% zeker dat alles werkt, dus zijn de die meldingen overbodig, want die komen en er dan niet.

Je hebt een nette manier van afhandelen, maar uit den boze, no way josé
Rick de Graaff op 19/01/2012 16:21:46

Als je aan het developen ben kan je makkelijk een die gebruiken, want anders gaat hij gewoon verder met het bijvoorbeeld inserten in de database.

Als je de website o.i.d oplevert dan weet je 100% zeker dat alles werkt, dus zijn de die meldingen overbodig, want die komen en er dan niet.

Oh nee, maak je datastructuur eens kapot. Wedden dat je script opeens vaag zal doen i.p.v. een fatsoenlijke melding tonen.

die() is voor één ding goed. Het hoort op het kerkhof.
Afleren dus.
Rick de Graaff op 19/01/2012 16:21:46
...
Als je de website o.i.d oplevert dan weet je 100% zeker dat alles werkt, dus zijn de die meldingen overbodig, want die komen en er dan niet.
...

Als jij dit kunt garanderen voor een fatsoenlijke prijs vind ik je knap
Beste Rick,

Nee daar ben ik het niet mee eens. Wanneer je netjes een if / else structuur gebruikt heb je een betere foutafhandeling gerealiseerd. Je kan dan bijvoorbeeld de foutmelding loggen, en noem maar op. Wanneer je een nette if/else structuur gebruikt gaat de applicatie ook niet door, dat heeft niets met de or die methode te maken.

Wanneer je een website oplevert betekend het niet dat hij 100% werkend is. Zoals ik al zei, wanneer de database server down gaat, gaat de or die - mysql_error() methode niet op. Sterkers het kan zelfs heel gevaarlijk zijn.

Tot slot, We besteden hier niet voor niets zoveel aandacht aan. Het is echt slecht om dit te gebruiken.

Niels
Dus als jij een website oplevert, heb jij alle mogelijke testcases die er bestaan getest en weet je dus 100% zeker dat er nooit een fout kan optreden?

Defensief programmeren. En dat doe je via een goede foutafhandeling.

@Aar, gebruiken we toch exit() :P
TJVB tvb op 19/01/2012 16:24:29

[quote="Rick de Graaff op 19/01/2012 16:21:46"]...
Als je de website o.i.d oplevert dan weet je 100% zeker dat alles werkt, dus zijn de die meldingen overbodig, want die komen en er dan niet.
...

Als jij dit kunt garanderen voor een fatsoenlijke prijs vind ik je knap
[/quote]

Als je een goed systeem hebt wel ja. Er word eerst goed getest door mijn mensen en mijzelf.
En ik gebruik de die functie altijd bij een insert. Met een error code erbij, deze kunnen de mensen naar ons sturen zodat wij precies weten waar we moeten zoeken :)

Handig, en toch de die erbij.
Rick de Graaff op 19/01/2012 16:28:12

Als je een goed systeem hebt wel ja. Er word eerst goed getest door mijn mensen en mijzelf.
En ik gebruik de die functie altijd bij een insert. Met een error code erbij, deze kunnen de mensen naar ons sturen zodat wij precies weten waar we moeten zoeken :)

Handig, en toch de die erbij.

Die die() is NIET handig. Waarom zou je als er iets fout gaat je hele script laten stoppen?
Geef me eens een reden? HTML wordt afgekapt, e.v.t andere scripts zullen na een die() niet meer uitgevoerd worden. Waarom vind jij het dan nog zo handig?
Beste Rick,

Naast dat het niet handig is, is het ook nog heel gevaarlijk. Een hacker ziet de foutcode en de SQL waarbij het fout ging ook. Daarop kan hij of zij netjes op voort borduren.

Ik zie namelijk in andere reacties (in andere topics) dat je niet gebruik maakt van het escape van (evt) gevaarlijke input.

Ik raad voor je eigen bestwil nogmaals die tutorial aan.

Niels Kieviet
Rick de Graaff op 19/01/2012 16:28:12

...
Als je een goed systeem hebt wel ja. Er word eerst goed getest door mijn mensen en mijzelf.
En ik gebruik de die functie altijd bij een insert. Met een error code erbij, deze kunnen de mensen naar ons sturen zodat wij precies weten waar we moeten zoeken :)

Handig, en toch de die erbij.


Totaal bug vrij is bijna een utopie, get real. Tuurlijk test je alles maar er komen uiteindelijk altijd wel bugs naar voren. Anders heb je zelf ook geen error codes nodig.
Fouten log je en de gebruiker geef je een algemene foutmelding (netjes in de layout van je website waardoor het fatsoenlijk over komt)
Anders word het voor een hacker wel leuker, he nu heb ik een andere foutmelding, waarschijnlijk kom ik verder.
Ik heb die tut allang gelezen hoor. Daarom zei ik daarnet ookal dat je een nette afhandeling had.
Maar een hacker komt niet in het CMS.

Nee ik geef de die of afhandeling niet op idd, maar moet niet alles voorkauwen toch, en daar is jou handige tut dan weer voor ;)

En voor - Aar -
Alles stopt en de mensen moeten contact met ons opnemen. Klaar, verders niets. Er word geen bewerking meer gedaan.

Maar hier kunnen we lang en breed over praten, maar ik blijf het toch zo doen zoals ik het doe...
En ja dan kan ik idd reacties krijgen van joh stom, niet doen! en hoezo niet..

heeft geen zin, i do it my way.. Logisch toch?

Maar hartstikkje bedankt! :]

Reageren