php und BIGINT aus mysql

Problem

Eine mysql-Tabelle hat als Indexspalte einen Datentyp BIGINT, da sehr hohe Werte benötigt werden (z.B. weil man mit einem sehr hohen auto-increment-Wert anfängt).
Nun wird die ID nach Einfügeoperationen benötigt. Normalerweise lässt sich das leicht mit Hilfe von mysql_insert_id() lösen:

<?php
$result =
mysql_query( "INSERT INTO `table`
    (`foo`, `bar`)
    VALUES
    ('$foo', '$bar')" );

$id = mysql_insert_id();
?>

Das funktioniert hier aber nicht: mysql liefert nämlich BIGINT zurück, und diesen Datentyp kennt php gar nicht. Stattdessen wird der Wert stillschweigend zum Datentyp INT konvertiert. Und die Ausgabe entspricht keinesfalls dem erwarteten Wert!

Lösung

mysql hat die Funktion LAST_INSERT_ID(), die man extra aufrufen muss:

<?php
$result =
mysql_query( "INSERT INTO `table`
    (`foo`, `bar`)
    VALUES
    ('$foo', '$bar')" );

$result =
mysql_query( "SELECT LAST_INSERT_ID() AS `id`
    FROM `table`");
while ( $row = mysql_fetch_object( $result ) )
{
$id = $row->id;
}
?>

Quellen

  1. SelfHTML-Forum: Frage zu Lücken durch auto_increment
  2. PHP-Manual: mysql_insert_id