laatst aangemaakt id
Hoe kan je de laatste aangemaakte autoincremented id verkrijgen
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
Francoi gckx op 22/10/2012 10:30:16:
Hoe kan je de laatste aangemaakte autoincremented id verkrijgen
Waar heb je die voor nodig?
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
In alle andere gevallen kun je een query gebruiken zoals Kris ook aangeeft. Vandaar mijn vraag wat de TS wil doen.
Code (php)
1
2
3
4
5
6
7
8
9
10
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);
?>
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
Je kunt dan LAST_INSERT_ID() in de volgende query gebruiken:
Code (php)
1
2
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)
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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);
?>
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
Fatal error: Call to undefined function LAST_INSERT_ID()
Dit is geen functie die je met php kan oproepen.
dus ...
---
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
<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>
Code (php)
1
2
3
2
3
<?php
$res = $mysqli->query("UPDATE members SET cvid = LAST_INSERT_ID() WHERE username = '" . $usrname . "'");
?>
$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
Fatal error: Cannot pass parameter 2 by reference
Zie mijn vorige reactie!
weet u zeker dat LAST_INSERT_ID onthouden word door de vorige query
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
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();
....
mysql> SELECT LAST_INSERT_ID();
....
Gewijzigd op 22/10/2012 13:45:55 door Ger van Steenderen
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
En als je maar één query erachter hebt waarom? mysql_insert_id() voert op de achtergrond ook gewoon die SELECT LAST_INSERT_ID() uit.
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