insert_id

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

SQL beheerder / ontwikkelaar

Functie omschrijving Voor een klant in omgeving Tiel zijn wij op zoek naar een SQL beheerder met affiniteit met technisch applicatiebeheer. Je krijgt een fijne in-house werkplek waar je gaat werken aan diverse projecten. Dit bedrijf doet het beheer van databases voor een aantal bancaire klanten. Op dit momenten hebben zij ruim 1500 databases in beheer. Jouw werkzaamheden gaan er als volgt uit zien: Je gaat de development afdeling ondersteunen bij het ontwikkelen van MS SQL Scripts. Je zal zowel zelfstandig als in teamverband MS SQL databases installeren & beheren. Je monitort en onderzoekt incidenten en de achterliggende oorzaken. Je

Bekijk vacature »

Ervaren C#.NET developer

Functieomschrijving We zijn op zoek naar een ervaren C#.NET programmeur voor een moderne werkgever in de regio Prinsenbeek. Als programmeur zal je bezig zijn met het ontwikkelen van op maat gemaakte webapplicaties voor verschillende klanten, waarbij je ervoor zorgt dat complexe processen zo goed mogelijk worden ondersteund. Je takenpakket omvat onder andere: Werken met databases en dataopslagoplossingen, implementeren van beveiligingsoplossingen en het waarborgen van de beveiliging van applicaties en gegevens, evenals het schrijven van technische documentatie en gebruikershandleidingen. Het ontwikkelen en onderhouden van C#.NET-applicaties. Bijdragen aan het ontwerp en de architectuur van softwaretoepassingen. Het schrijven van hoogwaardige en herbruikbare codes.

Bekijk vacature »

Node.js developer looking for a challenging consul

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

Bekijk vacature »

Back-end PHP Developer

Dit ga je doen Her- en uitbouwen van het inhouse softwareplatform dmv PHP; Onderhouden van bovengenoemd platform in PHP; Sparren met het team; Meedenken over nieuwe functionaliteiten, security etc; Jouw input leveren aan het proces door op de hoogte te blijven van nieuwe ontwikkelingen etc. Hier ga je werken Onze klant, gevestigd in de omgeving van Alkmaar, levert wereldwijd oplossingen op het gebied van IT. Dag in dag uit werken zij met veel passie aan hun product waarmee ze streven naar verbeteringen binnen zorg. Voor onze klant zijn we op zoek naar een medior PHP Developer. Je komt te werken

Bekijk vacature »

Medior/senior Back-end developer wanted!

Functie Because of the growth within the company, we are looking for reinforcement in the devlopmenttean. As a back-end developer you build the company software that helps us with the primary processes. A fun (internal) project in which you continuously develop the software! You will work in a small team, we have daily stand-ups and a scrum session every fortnight, led by our Scrum Master. During these sessions, you get the opportunity to present your ideas and discuss them with your fellow developers and the Product Owner. Within the development teams, we use Trello, Gitlab, Jiira, Confluence and Boockstack. They

Bekijk vacature »

In-house .NET software developer

Functie omschrijving Ben jij op zoek naar een uitdagende in-house development functie? Maak jij graag hét verschil m.b.t. interne automatisering? Haal jij energie uit het automatiseren van processen voor je eigen collega's? Dan hebben wij de perfecte vacature voor je! Voor een gezellig Brabants familiebedrijf, zijn wij op zoek naar een .NET software developer. Je gaat in deze zelfstandige functie werken aan de ontwikkeling van eigen applicaties & en het koppelen van deze applicaties aan de ingekocht software. Jouw werkzaamheden zien er als volgt uit: Het management team signaleert behoeftes vanuit de business. Vervolgens worden deze behoeftes uitgewerkt en geprioriteerd.

Bekijk vacature »

Software Developer Mendix / Maatschappelijk Betrok

Dit ga je doen Het bouwen van de Mendix applicaties in samenwerking met jouw team of zelfstandig; Werken met Scrum methodiek; Ontwikkelen van vooruitstrevende oplossingen; Meedenken over nieuwe applicaties en ontwikkelingen; On the job eigen maken van de Mendix omgeving. Hier ga je werken Deze dynamische en snelgroeiende organisatie begeeft zich in de recyclingbranche. Zij nemen op duurzame en efficiënte manier de recycling op zich. Vanwege hun snelle groei zijn zij op zoek naar een young professional die zich graag wilt ontwikkelen als Mendix Developer. Je komt te werken binnen een IT team van +/- 15 medewerkers. Het huidige ‘vaste’

Bekijk vacature »

OutSystems developer

Dit ga je doen Klanten adviseren over de mogelijkheden van OutSystems; OutSystems oplossingen ontwikkelen en implementeren; Stakeholdermanagement; Kennis en expertise up to date houden en delen met het team. Hier ga je werken Onze opdrachtgever, gevestigd in regio Amsterdam, is een innovatieve dienstverlener die zich richt op grote corporates in verschillende sectoren. Doordat je bij veel verschillende klanten aan de slag zal gaan is geen enkel project hetzelfde. De organisatie kenmerkt zich door hoge mate van professionaliteit en innovatieve oplossingen. In de rol van OutSystems developer zal jij verschillende grote klanten helpen om efficiënte OutSystems oplossingen te ontwikkelen en implementeren.

Bekijk vacature »

Software Programmeur

Functie omschrijving Voor onze opdrachtgever in omgeving Rotterdam zijn wij opzoek naar een software programmeur die goed kan schrijven in de talen C of C++ en die het leuk vind om te werken met Linux! Werkzaamheden Programmeur Je bent bezig met het ontwikkelen van software en webapplicaties. Je kunt technische klussen uitvoeren op locatie. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een project goed verloopt. Je zult klanten ondersteunen. Verder zul je technische ontwerpen en gebruikersdocumentaties schrijven en deze onderhouden. Bedrijfsprofiel Dit bedrijf wil de klanten een volledige oplossing kunnen bieden, waarbij ze een

Bekijk vacature »

Robot Programmeur

In het kort Drie redenen waarom deze vacature uniek is! Programmeren van zelflerende robots Werken op kantoor en testen in de bedrijfshal Je krijgt verantwoordelijkheid, vrijheid en je mag werken naar eigen inzicht De organisatie Hier ga je aan de slag Een bedrijf dat innovatieve robottoepassingen ontwerpt en bouwt voor onder andere de staal industrie, energie- bouw- en agrarische sector. De robots die vaak in combinatie met diverse randapparatuur geleverd worden vormen een totaaloplossing voor de klant. Dit zijn klanten over de hele wereld, van België en Duitsland tot China, India, maar ook in Nederland. Projecten waar momenteel aan wordt

Bekijk vacature »

C# developer

Functie Als ervaren Software Engineer wordt jij verantwoordelijk voor het bedenken en ontwikkelen van technische (maatwerk) oplossingen voor onze klanten en dit samen met de klant af te stemmen. Jij wordt o.a. verantwoordelijk voor de doorontwikkeling het software pakket welke voor ons enorm belangrijk is. Dit pakket zorgt er namelijk voor dat wij complete productielijnen kunnen aansturen en monitoren. Daarnaast heb jij actief contact met onze hoofdvestiging om het software achter een van onze systemen te verbeteren en te herschrijven. Momenteel zijn onze C# applicaties geschreven met o.a. Winforms. Echter hebben wij de actieve ambitie om dit te gaan herschrijven

Bekijk vacature »

Senior developer (PHP en VB.NET)

Functie De development afdeling bestaat uit 2 teams. Het productteam (10 developers) is verantwoordelijk voor verschillende applicaties met als doel om zoveel mogelijk te automatiseren en uit te werken tot standaard software. Met diverse Solutions Architecten en ervaren developers denken ze voortdurend mee met hun klanten en bouwen ze de basis van het uiteindelijke maatwerk dat wordt geleverd. Hiernaast hebben ze een maatwerk/projectteam. Dit team bestaat momenteel uit 8 developers (junior tot senior) en is verantwoordelijk voor het maatwerk in hun klantprojecten. Momenteel zijn ze op zoek naar een senior developer die aan de slag gaat in het productteam. Hierin

Bekijk vacature »

Delphi developer

Functie Als Delphi developer ga jij aan de slag in een team met twee andere ervaren Delphi programmeurs waaronder de Hoofd programmeur. Als team zijn jullie verantwoordelijk voor de doorontwikkeling van jullie bestaande applicatie. Daarnaast zijn jullie verantwoordelijk voor het onderhouden van deze applicatie en het oplossen van eventuele bugs. Eisen - HBO werk en denk niveau; - Minimaal één jaar ervaring met Delphi; - Goede beheersing van de Nederlandse taal in woord en geschrift; - Jij bent zelfstandig, maar kan ook in team verband werken. Aanbod - €3000,-- €4000,- op basis van jouw kennis en ervaring; - 8% vakantiegeld;

Bekijk vacature »

Teamlead PHP Developer

Functieomschrijving Voor een gewaardeerde werkgever in de buurt van Middelburg zijn wij op zoek naar een gemotiveerde teamlead PHP developer met affiniteit met Symfony/Laravel. Een enthousiast persoon die het ontwikkelteam komt versterken met het aanpakken van uitdagende projecten. Ben jij op zoek naar een uitdaging waar je de tijd en ruimte krijgt jezelf te ontwikkelen en je eigen IT-team aan te sturen? Lees dan snel verder! Die ga je doen: Bijdragen aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de PHP based applicaties; Ontwikkeling en beheer van de serviceportal in Symfony en de webshops in de tweede versie van

Bekijk vacature »

Cloud Engineer

Ben jij een ervaren Cloud Engineer die complexe omgevingen kan overzien en wil je graag in vaste dienst werken bij een professioneel en kleinschalig bedrijf waar je een belangrijke rol kan spelen? Wij, IntelliMagic in Leiden, ontwikkelen specialistische IT monitoring software die we als SaaS oplossing verkopen aan grote bedrijven in Europa en de VS. We zijn een Nederlands bedrijf met een goede sfeer en met grote waardering voor de persoonlijke inbreng en kwaliteiten van onze medewerkers. Wij zoeken een ervaren Cloud Engineer met academisch denkniveau die verantwoordelijk wordt voor het beheer van de cloud infrastructuur voor onze Europese klanten.

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 08:35:44
 
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.