laatst aangemaakt id

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Francoi gckx

Francoi gckx

22/10/2012 10:30:16
Quote Anchor link
Hoe kan je de laatste aangemaakte autoincremented id verkrijgen
 
PHP hulp

PHP hulp

24/11/2024 06:43:32
 
Kris Peeters

Kris Peeters

22/10/2012 10:44:35
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT id FROM mijn_tabel ORDER BY id DESC LIMIT 1


Hiermee heb je de laatste id.


Maar voorspellen wat de volgende id is die de auto increment zal aanmaken, is veel lastiger.

Stel: je hebt id=15 en id=16 verwijderd; id=14 is de hoogste id die over blijft
Om dan te weten dat de volgende id 17 is ... Dit zal niet evident zijn.

----

Je hebt ook functie mysql_insert_id().
Die is enkel te gebruiken net na een INSERT.
Gewijzigd op 22/10/2012 10:47:17 door Kris Peeters
 
Ozzie PHP

Ozzie PHP

22/10/2012 10:48:29
Quote Anchor link
Francoi gckx op 22/10/2012 10:30:16:
Hoe kan je de laatste aangemaakte autoincremented id verkrijgen

Waar heb je die voor nodig?
 
Chris PHP

Chris PHP

22/10/2012 10:57:43
Quote Anchor link
@Ozzie,

Wellicht voor laatst toegevoegde post, nieuwste lid, etc.

@Kris,

Dit leek mij ook de makkelijkste manier.
Gewijzigd op 22/10/2012 10:58:05 door Chris PHP
 
Ozzie PHP

Ozzie PHP

22/10/2012 11:15:19
Quote Anchor link
Dat is dus even de vraag. Na een insert (zoals Kris inmiddels heeft toegevoegd) gebruik je mysql_insert_id.

In alle andere gevallen kun je een query gebruiken zoals Kris ook aangeeft. Vandaar mijn vraag wat de TS wil doen.
 
Andy V

Andy V

22/10/2012 11:25:50
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
SELECT LAST_INSERT_ID() FROM table

of

$result = mysql_query("SHOW TABLE STATUS LIKE 'table_name'");
$row = mysql_fetch_array($result);
$nextId = $row['Auto_increment'];
mysql_free_result($result);
?>
Gewijzigd op 22/10/2012 11:34:37 door Andy V
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/10/2012 11:43:42
Quote Anchor link
Query 1:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
INSERT INTO orders (customer_id, order_date, order_status)
VALUES (12345, NOW(), 0)

Je kunt dan LAST_INSERT_ID() in de volgende query gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
INSERT INTO order_products (order_id, product_id, product_amount, product_price)
VALUES (LAST_INSERT_ID(), 2345, 4, 12.50), (LAST_INSERT_ID(), 2346, 1, 22.50)

LAST_INSERT_ID blijft dan de insert id van de eerste query vasthouden
 
Andy V

Andy V

22/10/2012 11:52:39
Quote Anchor link
Heb er ff een functie van gemaakt
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function last_insert_id($table){
    $result = mysql_query(sprintf("SHOW TABLE STATUS LIKE '%s'",
mysql_real_escape_string($table)));
    $row = mysql_fetch_array($result);
    $nextId = $row['Auto_increment'];
    mysql_free_result($result);
    return nextId-1; // omdat deze query de volgende insert Id ophaalt doen we eerst -1 om de laatste Id te krijgen
}

//gebruik:
$LastInsertId = last_insert_id($table);
?>
Gewijzigd op 22/10/2012 11:56:09 door Andy V
 
Francoi gckx

Francoi gckx

22/10/2012 12:53:23
Quote Anchor link
ik krijg een fatal error
Fatal error: Call to undefined function LAST_INSERT_ID()
 
Kris Peeters

Kris Peeters

22/10/2012 12:58:35
Quote Anchor link
Het is wel de bedoeling dat je die functie gebruikt in de SQL string.
Dit is geen functie die je met php kan oproepen.

dus ...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$sql
="SELECT LAST_INSERT_ID() FROM table";
...

?>


---
EDIT:

O ja, die post van Andy ...

Als je dit gebruikt:
$LastInsertId = last_insert_id($table);

Moet je ook die functie-definitie in je code zetten he.
Dus de volledige code van Andy copy/pasten.
Gewijzigd op 22/10/2012 13:05:22 door Kris Peeters
 
Francoi gckx

Francoi gckx

22/10/2012 13:11:28
Quote Anchor link
ik heb:

<code>
if ($stmt = $mysqli->prepare("INSERT INTO curriculum_vitae (naam, adres, postcode, woonplaats,
telefoon, mobiel, email, geboortedatum, vaardigheden, werkervaring,
opleidingen, functie, aanvullende_informatie, username)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"))


{
$stmt->bind_param("ssssssssssssss", $naam, $adres, $post_code, $woon_plaats, $tele_foon, $mobiel, $email, $geboortedatum, $vaardigheden, $werkervaring, $opleiding, $functie, $aanvul_informatie, $usrname);
$stmt->execute();
$stmt->close();



if (is_lid()) {

include('includes/db.php');
if ($stmt1 = $mysqli->prepare("UPDATE members SET cvid = ? WHERE username = '$usrname'"))
{
$stmt->bind_param("i", LAST_INSERT_ID());
$stmt->execute();
$stmt->close();
</code>
 
Andy V

Andy V

22/10/2012 13:27:37
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

//"LAST_INSERT_ID()"  in een string zetten

//dus:

$stmt->bind_param("i", "LAST_INSERT_ID()");
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/10/2012 13:32:59
Quote Anchor link
Je kunt geen SQL functie aan een parameter binden, en dat is ook helemaal niet nodig, want dat gegeven is op de db server. Dus hoef je ookn geen preps te gebruiken en kan je dus de query gewoon uitvoeren:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$res
= $mysqli->query("UPDATE members SET cvid = LAST_INSERT_ID() WHERE username = '" . $usrname . "'");
?>
Gewijzigd op 22/10/2012 13:34:54 door Ger van Steenderen
 
Francoi gckx

Francoi gckx

22/10/2012 13:36:04
Quote Anchor link
nu krijg ik:
Fatal error: Cannot pass parameter 2 by reference
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/10/2012 13:40:03
Quote Anchor link
Zie mijn vorige reactie!
 
Francoi gckx

Francoi gckx

22/10/2012 13:40:07
Quote Anchor link
weet u zeker dat LAST_INSERT_ID onthouden word door de vorige query
 
Andy V

Andy V

22/10/2012 13:40:38
Quote Anchor link
maar LAST_INSERT_ID() zou ik niet echt aan raden dan kan je beter de php functie mysql_insert_id() gebruiken als je deze toch vlak na een query gaat gebruiken..

Toevoeging op 22/10/2012 13:43:26:

dus
//eerste query

//daarna haal je laatst ingevoerde id op
$insertId = mysql_insert_id()

//bind param
$stmt->bind_param("i", $insertId);
Gewijzigd op 22/10/2012 13:41:01 door Andy V
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/10/2012 13:44:10
Quote Anchor link
Ja :-)
Mysql documentation:
LAST_INSERT_ID() (with no argument) returns a BIGINT (64-bit) value representing the first automatically generated value that was set for an AUTO_INCREMENT column by the most recently executed INSERT statement to affect such a column. For example, after inserting a row that generates an AUTO_INCREMENT value, you can get the value like this:
mysql> SELECT LAST_INSERT_ID();
....
Gewijzigd op 22/10/2012 13:45:55 door Ger van Steenderen
 
Andy V

Andy V

22/10/2012 13:44:49
Quote Anchor link
na de eerste query zet je mysql_insert_id() in een variabele omdat als je dan meer dan 2 queries met het zelfde id moet ingeven dan kan je die telkens opnieuw gebruiken voor die queries
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/10/2012 13:51:50
Quote Anchor link
Niet zo handig om mysql_inser_id() te gebruiken in combinatie met mysqli ;-)
En als je maar één query erachter hebt waarom? mysql_insert_id() voert op de achtergrond ook gewoon die SELECT LAST_INSERT_ID() uit.
 
Francoi gckx

Francoi gckx

22/10/2012 14:04:12
Quote Anchor link
@andy ik krijg:

0 (<- dit is geechoed echo $insertId en het zou 16 moeten zijn)
Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Couldn't fetch mysqli_stmt in C:\xampp\htdocs\6nieuw\matching.php on line 231

Warning: mysqli_stmt::execute() [mysqli-stmt.execute]: Couldn't fetch mysqli_stmt in C:\xampp\htdocs\6nieuw\matching.php on line 232

Warning: mysqli_stmt::close() [mysqli-stmt.close]: Couldn't fetch mysqli_stmt in C:\xampp\htdocs\6nieuw\matching.php on line 233

@Ger van Steenderen: met $res = $mysqli->query("UPDATE members SET cvid = LAST_INSERT_ID() WHERE username = '" . $usrname . "'"); word de cvid niet gewijzigd
Gewijzigd op 22/10/2012 14:05:28 door Francoi gckx
 

Pagina: 1 2 volgende »



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.