insert_id

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ervaren PHP Developer

Functie omschrijving Jelling IT zoekt ervaren PHP developer! Voor een organisatie in de regio Rhenen zijn wij op zoek naar een ervaren PHP developer die gaat functioneren als een verlengstuk van de klant. Jij bent iemand die technisch complexe zaken met enthousiasme aanvliegt. Je bent in staat om aan meerdere projecten te werken en werkt graag met de nieuwste technieken. In deze functie werk je veel samen met front-end developers en stel je alles in het werk om grote verschillen voor de klanten teweeg te brengen. Verder ben jij iemand die graag zichzelf uitdaagt en die altijd de beste wilt

Bekijk vacature »

PHP developer

Functie Voor een opdrachtgever in omgeving Leiden zijn wij op zoek naar een PHP developer die affiniteit heeft met C++. Ben jij reeds afgestudeerd of heb je al een paar jaar ervaring? Lees snel verder en kijk of dit iets voor jou is! Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Full Stack Java ontwikkelaar

Functieomschrijving Voor de politie zijn wij op zoek naar een Full stack Java ontwikkelaar. Als ervaren full stack Java ontwikkelaar binnen de gewenste deadlines meewerken aan de totstandkoming van de gewenste werkzaamheden. Taken Upgraden van GeoServer, SOLR, Oracle Spatial database, Tomcat Migreren Oracle Spatial naar PostgreSQL/PostGIS Migreren SOLR naar ElasticSearch Geografische gegevens op het interne netwerk beschikbaar maken Doorontwikkelen en actualiseren van de geografische services Het up to date brengen van de CI/CD pipeline, samen met medewerkers die verantwoordelijk zijn voor de CI/CD tooling Aanspreekbaar op de solution architectuur en stemt die met collega's in het cluster Geo De opdracht

Bekijk vacature »

Front-end developer (medior/senior)

Functie Het team bestaat uit een architect, fullstack developers, app developers, de product owner en projectmanager. Eenieder draagt vanuit zijn discipline bij aan een complete oplossing voor de klant. Uiteraard zul je hierin nauw samenwerken met je collega’s. Jij wordt verantwoordelijk voor de front-end implementatie en fungeert als lead op dit gebied binnen het team. Je kunt helder formuleren, ideeën uitdragen en overbrengen aan je collega’s. Qua technische stack is het vooral van belang dat je ervaren bent met Angular, HTML5, CSS en TypeScript. Verder is ervaring in NgRx, Bootstrap, BEM en Cypress een pré, evenals affiniteit met UX/UI Design!

Bekijk vacature »

Back-end Developer

Functieomschrijving Heb jij kort geleden je HBO ICT Informatica diploma in ontvangst mogen nemen? Of heb je een aantal jaar ervaring als Software Developer en ben je klaar voor een nieuw hoofdstuk in jouw carrière? Voor een gewaardeerde werkgever in de regio van Goirle zijn wij op zoek naar een junior/medior Back-end Developer met affiniteit met MS Acess. Samen met een vooruitstrevend team ben je verantwoordelijk voor het ontwikkelen van maatwerk software voor hun klanten. Je hebt kennis of ervaring van SQL en affiniteit met MS Acess. Je bent klantvriendelijk en flexibel ingesteld en vindt het leuk om klanten te

Bekijk vacature »

Front-end Developer

Functie omschrijving Wij zijn op zoek naar een Front-end Developer! Als Front-end Developer binnen dit softwarebedrijf ga je de frontends voor zowel je eigen interne projecten als die voor klanten opzetten, onderhouden en uitbreiden. Je zet ideeën om naar mooie successen voor de klanten. Dat is in een notendop wat je gaat doen! Wat kun je verwachten? Je werkt aan de doorontwikkeling van bestaande maatwerkapplicaties. Bijvoorbeeld wanneer de klant de applicatie wil uitbreiden met een nieuwe feature; Samen met het team van backenders en desginers zet je nieuwe ideeën van klanten om naar mooie oplossingen; Je werkt met verschillende frameworks.

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET Developer start jij in een team met 15 developers. In het team is er genoeg senioriteit om ervoor te zorgen dat jij de juiste begeleiding krijgt. Jij begint als eerst alle software pakketten en processen eigen te maken. Vervolgens ga jij deze software programmeren, onderhouden en testen. Ook ga jij research doen naar nieuwe mogelijkheden en zoek jij uit hoe je dit kan implementeren. Jullie werken intern op project basis en afhankelijk van het project werken jullie wel of niet iedere ochtend met een standup. Je gaat als Full stack developer aan de slag en gaat

Bekijk vacature »

Senior .NET Ontwikkelaar

In het kort Als Senior .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag met complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek (denk aan ECT) en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan

Bekijk vacature »

Fasttrack learning & development voor Java dev

Wat je gaat doen: Wij zoeken enthousiaste en ambitieuze junior en medior ontwikkelaars die toe zijn aan de volgende stap in hun carrière. Wij helpen je op je pad naar senior ontwikkelaar door ons fasttrack learning en development programma. Na een kort en intensief programma ga jij aan de slag bij klanten van DPA. Daarnaast krijg je veel ruimte om je te ontwikkelen als persoon en als specialist. De eerste maand gaan we aan de slag om je certificeringen te behalen waaronder OCP (Oracle Certified Professional). Daarnaast nemen we een deepdive in Spring Boot. Ook laten we je kennismaken met

Bekijk vacature »

Back end developer Python, PHP

Functie Jij als full stack ontwikkelaar zult komen te werken samen met 1 PHP ontwikkelaar een PO en een flexibele schil aan ontwikkelaars . Samen ga je ervoor zorgen dat de huidige producten doorontwikkeld worden. De marketplace is geschreven in PHP Laravel en in de front end React. De roostersoftware is ontwikkeld in Python in combinatie met React in de front end. Jij zult voornamelijk (lees 75%) werken aan de roostersoftware. Momenteel ligt de uitdaging in het feit dat de roostersoftware breder schaalbaar moet worden zodat het voor meerdere flexwerkers ingezet kan worden. Verder willen ze financiële koppelingen gaan maken

Bekijk vacature »

.NET developer

Functie Jouw team van vier collega .NET developers is verantwoordelijk voor het bouwen van de ETL processen van jouw nieuwe werkgever. Op dit moment wordt de front-end gedaan door een extern team van professionals. Echter wilt jouw nieuwe werkgever graag intern deze kennis uitbreiden en heeft dan ook de ambitie om dit voor het eind van het jaar intern te gaan aanpakken. Dit betekend dat jij als .NET ontwikkelaar de ideale kans krijgt om jezelf samen met jouw collega’s te ontwikkelen als full stack developer. Als .NET ontwikkelaar werk jij bij deze gave werkgever met C# .NET, SQL, JavaScript, REST

Bekijk vacature »

Mendix Ontwikkelaar - Vernieuwen van het applicati

Bedrijfsomschrijving De ontwikkelingen in de transportsector gaan razendsnel. Bij ons kun je een belangrijke rol spelen in deze sector. We streven ernaar om onze klanten te ontzorgen op het gebied van continuïteit en veiligheid met innovatieve producten en diensten. We willen dat onze klanten de veiligste vervoerders van Europa worden. Ons team werkt hard om deze ambitieuze doelstellingen te bereiken en we bieden een motiverende werkomgeving aan. We zijn op zoek naar zelfstarters met een focus op resultaat en beslissingsbevoegdheid. Functieomschrijving Als Mendix ontwikkelaar bij deze organisatie heb je een gevarieerde baan. Het applicatielandschap wordt vernieuwd en de “schade en

Bekijk vacature »

IT Infrastructuur Developer

IT Infrastructuur Developer Ben jij (bijna) klaar met je HBO studie in de richting van IT? Opzoek naar een spannende eerste baan, waar je ontzettend veel kan leren? Dan hebben wij de ultieme job voor jou! Voor een goede klant van ons in de financiële dienstverlening zijn wij opzoek naar een Junior Infrastructure Developer. Deze baan is een mooie kans om een sterke start te geven aan jouw carrière binnen de IT! De job Je werkt nauw samen met het Devops team, en zal je voornamelijk bezighouden met het automatiseren van infrastructure componenten. De componenten worden opgevraagd door het DevOps

Bekijk vacature »

Pagina: « vorige 1 2

Paul Ulje

Paul Ulje

22/09/2016 02:11:24
Quote Anchor link
Beste Bart,

Mijn onbegrip betreffende PHP is groot, dat geef ik graag toe.
Dus als jij mij kan uitleggen waarom de insert_id na een insert (IF) last zou hebben van een update code (ELSE) ergens anders ben ik weer een stap verder. Is er een geheime afspraak dat er geen tekens in de brontekst mogen staan tussen de insert en insert_id?

de testcode was:
if ($id === 9999) $p = $db->query($qInsert);
else $p = $db->query($qUpdate);
$id = $db->insert_id;
 
PHP hulp

PHP hulp

28/04/2024 06:05:29
 
Ward van der Put
Moderator

Ward van der Put

22/09/2016 09:38:18
Quote Anchor link
Misschien moeten we even terug langs af. Wat verwacht je van die id? En wat wil je met die id bereiken?
Paul Ulje op 18/09/2016 19:44:07:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$db
= openDB(); // OO-functie de db-connectie afhandelt, werkt foutloos
if  ($pid === 9999) $p = $db->query($qInsert); // zonder pid
else  $p = $db->query($qUpdate); // met de optie WHERE pid='$pid'
?>

Het hele eiereneten is dat je in de UPDATE een bestaand record bijwerkt met een bestaande en bekende id. De nieuwe, tot dan nog onbekende id heb je alleen nodig wanneer je met INSERT een nieuw record toevoegt.

Stel, je gebruikt de id voor een klantnummer. Bij het toevoegen van een nieuwe klant met INSERT krijgt die klant een nieuw klantnummer dat pas bekend is na het uitvoeren van de query. Wijzig je echter de gegevens van een bestaande klant, dan gebruik je een bestaande én bekende id in de UPDATE — en heeft de laatst toegevoegde, nieuwe id in die context geen betekenis.

Ik vermoed dat je — elders in je code — wat last hebt van code smell, bijvoorbeeld doordat je de id voor twee verschillende dingen gebruikt.
 
Ivo P

Ivo P

22/09/2016 09:46:18
Quote Anchor link
ik had nog nooit gehoord van de optie om na een update-query last_insert_id op te kunnen vragen.

Ik snap ook niet wat dat zou moeten opleveren. Google levert me alleen topics van mensen die niets terugkrijgen van deze functie en als comment krijgen dat ze ook niets inserten.
En anders niet meer dan handleidingen die weliswaar de update-query noemen als mogelijke bron voor de insert_id functie, maar niet toelichten wat je dan terug mag verwachten.

Iemand een uitleg wat insert_id zou moeten teruggegeven bij een update-query? Enige wat ik me namelijk voor zou kunnen stellen, is een trigger die bij een update afgaat en dan wat insert. Maar dan zou dat ook bij een DELETEquery moeten werken.

@Paul
Waarom zou je die id opvragen als je hem vooraf al weet?
 
Paul Ulje

Paul Ulje

22/09/2016 16:11:53
Quote Anchor link
Dit is waar het mee begon:
W3Schools zegt:
If we perform an INSERT or UPDATE on a table with an AUTO_INCREMENT field, we can get the ID of the last inserted/updated record immediately: $last_id = $conn->insert_id;

@Paul
Waarom zou je die id opvragen als je hem vooraf al weet?

Inderdaad Ivo. Ik zou het niet weten. Maar wie beweert er dan ook dat ik het id wil opvragen als ik hem al weet? Ik niet. Lees de draad en verbaas je net als ik over die vreemde aanname van sommigen.

Ik heb drie regeltjes gemaakt om de bewering van W3Schools te testen. En dan blijkt het niet te werken.
Waarom niet? Géén idee. Ook niet na de hulp van SanThe. Nou, dan haal ik die id wel op een andere manier op na een insert. Ik zie daar geen probleem in. Maar een aantal PHPers is het daar niet mee eens.
Gewijzigd op 22/09/2016 16:12:42 door Paul Ulje
 
Ward van der Put
Moderator

Ward van der Put

22/09/2016 16:22:31
Quote Anchor link
Paul Ulje op 22/09/2016 16:11:53:
Ik heb drie regeltjes gemaakt om de bewering van W3Schools te testen. En dan blijkt het niet te werken.

Dat is helaas bekend. Vandaar dat ze vaak "W3Fools" worden genoemd.
Er is zelfs een website aan besteed.

Voor beweringen die veel dichter bij de waarheid liggen, kun je beter 'RTFM' in de documentatie duiken, in dit geval bijvoorbeeld die van PDO::lastInsertId voor PHP.
 
Ivo P

Ivo P

22/09/2016 16:51:23
Quote Anchor link
echter: http://php.net/manual/en/mysqli.insert-id.php

heeft het ook over update.

"The mysqli_insert_id() function returns the ID generated by a query on a table with a column having the AUTO_INCREMENT attribute. If the last query wasn't an INSERT or UPDATE statement or if the modified table does not have a column with the AUTO_INCREMENT attribute, this function will return zero. "
 
Ward van der Put
Moderator

Ward van der Put

22/09/2016 17:26:23
Quote Anchor link
Dat is wel atypisch gedrag, want je verwacht bij een UPDATE het aantal affected rows.

Quote:
UPDATE returns the number of rows that were actually changed. The mysql_info() C API function returns the number of rows that were matched and updated and the number of warnings that occurred during the UPDATE.


Als je niets toevoegt maar meerdere records wijzigt, en je de update-volgorde dan ook nog eens kunt wijzigen met een ORDER BY, wat is dan nog de betekenis van de last_insert_id()?

De TS zou ook daarom onderhand wel moeten kunnen uitleggen wat hij nou eigenlijk concreet met die id wil doen — anders dan een voorbeeld van W3Fools weerleggen, want dat die vaak niet kloppen, wisten we al.
Gewijzigd op 22/09/2016 17:26:59 door Ward van der Put
 
Ben van Velzen

Ben van Velzen

22/09/2016 17:40:14
Quote Anchor link
Dat dacht ik dus ook, want hoe vraag je het id op van "de gewijzigde rijen?" Enkelvoud vs meervoud enzo.
Gewijzigd op 22/09/2016 17:41:16 door Ben van Velzen
 
Willem vp

Willem vp

22/09/2016 18:56:33
Quote Anchor link
Ivo P op 22/09/2016 16:51:23:
echter: http://php.net/manual/en/mysqli.insert-id.php

heeft het ook over update.

"The mysqli_insert_id() function returns the ID generated by a query on a table with a column having the AUTO_INCREMENT attribute. If the last query wasn't an INSERT or UPDATE statement or if the modified table does not have a column with the AUTO_INCREMENT attribute, this function will return zero. "

Ik gok dat dat een booboo is en dat er REPLACE wordt bedoeld in plaats van UPDATE (replace is in feite een combinatie van delete en insert).

Voor de gein ben ik eens in de sourcecode van PHP gedoken. De C-code is net iets te ingewikkeld om in een oogopslag te kunnen bepalen hoe het werkt, maar de testscripts laten duidelijk zien dat mysql(i)_insert_id() alleen wordt getest met INSERT-statements. Dat suggereert ook wel het een en ander...
 
Ben van Velzen

Ben van Velzen

22/09/2016 19:03:10
Quote Anchor link
De manual heeft het ook over UPDATE, dat klopt. Maar handleidingen kunnen ook bugs hebben ;-)
Om daar echt zeker van te zijn zou je de mysql client library moeten bekijken vermoed ik, omdat deze rechtstreeks aangeroepen wordt. De logica van MySQL kennende is dit soort gedrag mogelijk zelfs afhankelijk van de sql mode.
Gewijzigd op 22/09/2016 19:03:46 door Ben van Velzen
 
Ward van der Put
Moderator

Ward van der Put

23/09/2016 06:25:50
Quote Anchor link
Voor wie het ook eens wil testen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

$dsn      = 'mysql:host=localhost;dbname=test';
$username = 'root';
$password = '';

$dbh = new \PDO($dsn, $username, $password);
$dbh->query("
    CREATE TABLE IF NOT EXISTS users (
      user_id     SMALLINT(5) UNSIGNED  NOT NULL  AUTO_INCREMENT,
      first_name  VARCHAR(255)          NOT NULL,
      PRIMARY KEY pk_user_id (user_id)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8  COLLATE=utf8_general_ci
"
);

// Drie records toevoegen: user_id 1, 2 en 3
$dbh->query("
    INSERT INTO users (first_name)
    VALUES ('Jan'), ('Piet'), ('Joris')
"
);

// Je zou user_id == 3 verwachten, maar dit is: string(1) "1"
var_dump($dbh->lastInsertId());

// Record 2 bijwerken
$dbh->query("
    UPDATE users
    SET first_name = 'Kees'
    WHERE user_id = 2
"
);

// We hebben niets toegevoegd: string(1) "0"
var_dump($dbh->lastInsertId());

// Nog een record toevoegen: user_id wordt 4
$dbh->query("
    INSERT INTO users (first_name)
    VALUES ('Corneel')
"
);

// Nu wel juist: string(1) "4"
var_dump($dbh->lastInsertId());

// Nog drie records toevoegen: user_id 5, 6 en 7
$dbh->query("
    INSERT INTO users (first_name)
    VALUES ('Karen'), ('Kristel'), ('Kathleen')
"
);

// Je zou user_id == 7 verwachten: string(1) "5"
var_dump($dbh->lastInsertId());
?>

Bij de eerste INSERT met id 1, 2 en 3 is lastInsertId() 1; bij de derde INSERT met id 5, 6 en 7 is lastInsertId() 5. Het lijkt er dus op dat bij een INSERT van meerdere records de eerste id (1 en 5) wordt gebruikt. En dat is niet de hoogste id (3 en 7).
Gewijzigd op 23/09/2016 07:28:28 door Ward van der Put
 
Willem vp

Willem vp

23/09/2016 08:50:28
Quote Anchor link
Ward van der Put op 23/09/2016 06:25:50:
// Drie records toevoegen: user_id 1, 2 en 3
[...]
// Je zou user_id == 3 verwachten, maar dit is: string(1) "1"

Interessant. Waarom zou je dat verwachten? ;-)

Als je het insert_id opvraagt, doe je dat met een reden. Die reden is niet omdat je het id van het volgende record wilt berekenen (dat wordt immers gegenereerd door de database) maar waarschijnlijk omdat je de inserts wilt nabewerken. En in dat geval heb je meer aan het id van het eerste ingevoegde record dan aan dat van het laatste.

In software engineering zijn drie dingen moeilijk: naamgeving en tellen. Dit is zo'n voorbeeld van naamgeving. Een functienaam als id_of_first_inserted_record_for_latest_query() is ook niet de meest handige.

Quote:
Het lijkt er dus op dat bij een INSERT van meerdere records de eerste id (1 en 5) wordt gebruikt.

Technisch gezien wordt het auto_increment-id gebruikt dat de tabel had vlak voor het eerste record werd ingevoegd. (En ja, ik heb ook de sourcecode van MySQL erbij gehaald. ;-) )
Gewijzigd op 23/09/2016 08:55:57 door Willem vp
 
Ward van der Put
Moderator

Ward van der Put

23/09/2016 09:51:23
Quote Anchor link
Willem, dank voor de toevoeging!

Dan is deze frisse blik onder de motorkap dus wat er in de documentatie ontbreekt:

Willem vp op 23/09/2016 08:50:28:
En in dat geval heb je meer aan het id van het eerste ingevoegde record dan aan dat van het laatste.
[…]
Technisch gezien wordt het auto_increment-id gebruikt dat de tabel had vlak voor het eerste record werd ingevoegd.
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.