Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Geeft de identificatie terug voor de rij die het laatst is ingevoegd in een tabel in de database. De tabel moet een kolom IDENTITEIT EN NIET NULL hebben. Als een sequentienaam wordt opgegeven, lastInsertId geeft het meest recent ingevoegde volgnummer terug voor de opgegeven sequentienaam (voor meer informatie over sequentienummers, zie Sequentienummers).
Syntaxis
string PDO::lastInsertId ([ $name = NULL ] );
Parameterwaarden
$ naam: Een optionele string waarmee je een sequentienaam kunt specificeren.
Retourwaarde
Als er geen sequentienaam wordt gegeven, wordt een string van de identifier voor de rij die het meest recent is toegevoegd, gebruikt. Als een sequentienaam wordt gegeven, een string van de identifier voor de sequentie die het meest recent is toegevoegd. Als de methodeaanroep faalt, wordt de lege string teruggegeven.
Opmerkingen
Ondersteuning voor PDO werd toegevoegd in versie 2.0 van de Microsoft Drivers for PHP for SQL Server.
Tussen versie 2.0 en 4.3 is de optionele parameter een tabelnaam, en de returnwaarde is de ID van de rij die het meest recent aan de geleverde tabel is toegevoegd.
Vanaf 5.0 wordt de optionele parameter beschouwd als een sequentienaam, en de returnwaarde is de sequentie die het meest recent is toegevoegd voor de opgegeven sequentienaam.
Als een tabelnaam wordt gegeven voor versies na 4.3, lastInsertId geeft een lege string terug.
Sequenties worden alleen ondersteund in SQL Server 2012 en hoger.
Example
<?php
$server = "myserver";
$databaseName = "mydatabase";
$uid = "myusername";
$pwd = "<password>";
try {
$conn = new PDO("sqlsrv:Server=$server;Database=$databaseName", $uid, $pwd);
// One sequence, two tables
$tableName1 = 'seqtable1';
$tableName2 = 'seqtable2';
$sequenceName = 'sequence1';
$stmt = $conn->query("IF OBJECT_ID('$sequenceName', 'SO') IS NOT NULL DROP SEQUENCE $sequenceName");
$sql = "CREATE TABLE $tableName1 (seqnum INTEGER NOT NULL PRIMARY KEY, SomeNumber INT)";
$stmt = $conn->query($sql);
$sql = "CREATE TABLE $tableName2 (ID INT IDENTITY(1,2), SomeValue char(10))";
$stmt = $conn->query($sql);
$sql = "CREATE SEQUENCE $sequenceName AS INTEGER START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 100 CYCLE";
$stmt = $conn->query($sql);
$ret = $conn->exec("INSERT INTO $tableName1 VALUES( NEXT VALUE FOR $sequenceName, 20)");
$ret = $conn->exec("INSERT INTO $tableName1 VALUES( NEXT VALUE FOR $sequenceName, 40)");
$ret = $conn->exec("INSERT INTO $tableName1 VALUES( NEXT VALUE FOR $sequenceName, 60)");
$ret = $conn->exec("INSERT INTO $tableName2 VALUES( '20' )");
// return the last sequence number if sequence name is provided
$lastSeq1 = $conn->lastInsertId($sequenceName);
// defaults to $tableName2 -- because it returns the last inserted id value
$lastRow = $conn->lastInsertId();
// providing a table name in lastInsertId should return an empty string
$lastSeq2 = $conn->lastInsertId($tableName2);
echo "Last sequence number = $lastSeq1\n";
echo "Last inserted ID = $lastRow\n";
echo "Last inserted ID when a table name is supplied = $lastSeq2\n";
// One table, two sequences
$tableName = 'seqtable';
$sequence1 = 'sequence1';
$sequence2 = 'sequenceNeg1';
$stmt = $conn->query("IF OBJECT_ID('$sequence1', 'SO') IS NOT NULL DROP SEQUENCE $sequence1");
$stmt = $conn->query("IF OBJECT_ID('$sequence2', 'SO') IS NOT NULL DROP SEQUENCE $sequence2");
$sql = "CREATE TABLE $tableName (ID INT IDENTITY(1,1), SeqNumInc INTEGER NOT NULL PRIMARY KEY, SomeNumber INT)";
$stmt = $conn->query($sql);
$sql = "CREATE SEQUENCE $sequence1 AS INTEGER START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 100";
$stmt = $conn->query($sql);
$sql = "CREATE SEQUENCE $sequence2 AS INTEGER START WITH 200 INCREMENT BY -1 MINVALUE 101 MAXVALUE 200";
$stmt = $conn->query($sql);
$ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence1, 20 )");
$ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence2, 180 )");
$ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence1, 40 )");
$ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence2, 160 )");
$ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence1, 60 )");
$ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence2, 140 )");
// return the last sequence number of 'sequence1'
$lastSeq1 = $conn->lastInsertId($sequence1);
// return the last sequence number of 'sequenceNeg1'
$lastSeq2 = $conn->lastInsertId($sequence2);
// providing a table name in lastInsertId should return an empty string
$lastSeq3 = $conn->lastInsertId($tableName);
echo "Last sequence number of sequence1 = $lastSeq1\n";
echo "Last sequence number of sequenceNeg1 = $lastSeq2\n";
echo "Last sequence number when a table name is supplied = $lastSeq3\n";
$stmt = $conn->query("DROP TABLE $tableName1");
$stmt = $conn->query("DROP TABLE $tableName2");
$stmt = $conn->query("DROP SEQUENCE $sequenceName");
$stmt = $conn->query("DROP TABLE $tableName");
$stmt = $conn->query("DROP SEQUENCE $sequence1");
$stmt = $conn->query("DROP SEQUENCE $sequence2");
unset($stmt);
unset($conn);
} catch (Exception $e) {
echo "Exception $e\n";
}
?>
De verwachte uitvoer is:
Last sequence number = 3
Last inserted ID = 1
Last inserted ID when a table name is supplied =
Last sequence number of sequence1 = 3
Last sequence number of sequenceNeg1 = 198
Last sequence number when a table name is supplied =