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;
}
?>