sql_nextid() liefert 0 bei INSERT

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
QCO
Mitglied
Beiträge: 708
Registriert: 15.03.2003 12:30
Wohnort: Leipzig

sql_nextid() liefert 0 bei INSERT

Beitrag von QCO »

Ich möchte viele User auf einmal anlegen (user, groups und usergroups).
Dazu hab ich folgenden Code...

Das Problem: $last_group_id am Ende hat den Wert 0. Aber warum? Eigentlich sollte es die Gruppen-ID der zuletzt angelegten Gruppe sein (wegen autoincrement).

Code: Alles auswählen

		$group_sql = '';

        for($i = 0; $i < $nr_users; $i++)
        {
            $group_sql .= ( ( empty($group_sql) ) ? '' : ', ' ) . "('', 'Personal User', 1, 0)";
        }

        $sql = "INSERT INTO " . GROUPS_TABLE. " (group_name, group_description, group_single_user, group_moderator) VALUES $group_sql";
        if ( !$db->sql_query($sql) )
        {
            message_die(GENERAL_ERROR, "Could not insert groups", "", __LINE__, __FILE__, $sql);        
        }

		$last_group_id = $db->sql_nextid();
Der INSERT funktioniert (die Gruppen sind danach da).
Schnelle direkte Hilfe? Modeinbau? Umfassender, persönlicher Support? Ein individuelles Design/Template?
Ich bin käuflich und löse zu kleinen Preisen Deine Probleme. Anfragen bitte per PN oder Mail.
Benutzeravatar
QCO
Mitglied
Beiträge: 708
Registriert: 15.03.2003 12:30
Wohnort: Leipzig

Beitrag von QCO »

*wirklichnichtnervenwill*, aber ich brauche dazu mal relativ schnell eine Meiung/ Lösung/ Idee/ Alternative, weil ich sonst nicht weiterarbeiten kann...
Schnelle direkte Hilfe? Modeinbau? Umfassender, persönlicher Support? Ein individuelles Design/Template?
Ich bin käuflich und löse zu kleinen Preisen Deine Probleme. Anfragen bitte per PN oder Mail.
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Könnte es evtl. schlichtweg daran liegen, dass du mehrere Datensätze auf einmal hinzufügst? Das könnte evtl. zu ungewollten Ergebnissen führen:
MySQL Manual hat geschrieben:In the case of a multiple-row INSERT statement, mysql_insert_id() returns the first automatically generated AUTO_INCREMENT value; if no such value is generated, it returns the last last explicit value inserted into the AUTO_INCREMENT column.
Versuch's doch mal testweise mit nur einem Datensatz.

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
QCO
Mitglied
Beiträge: 708
Registriert: 15.03.2003 12:30
Wohnort: Leipzig

Beitrag von QCO »

Also mit einer einzelnen Zeile funktioniert es...
Dort steht doch aber "returns the first automatically generated AUTO_INCREMENT value". Ich bin nun nicht der Übergott in Englisch, aber das bedeutet doch, dass er mir nicht den Wert für die letzte Zeile, sondern für die erste Zeile liefern sollte, oder?

Na jedenfalls hab ich das Script jetzt erstmal geändert, so dass jede Zeile einzeln ausgeführt wird, aber aus Performance-Sicht ist das keine sehr schöne Lösung...
Schnelle direkte Hilfe? Modeinbau? Umfassender, persönlicher Support? Ein individuelles Design/Template?
Ich bin käuflich und löse zu kleinen Preisen Deine Probleme. Anfragen bitte per PN oder Mail.
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Es gibt bei MySQL afaik zwei Möglichkeiten, die letzte ID zu erhalten. Da müsste man jetzt genau untersuchen, welche sich wann wie verhält usw.
Ich würde es einzelnd machen - dann bist du dir über das Verhalten sicher.

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Alternativ könntest du ja alle Datensätze bis auf einen zusammen einfügen und dann den letzten einzeln.
Antworten

Zurück zu „Coding & Technik“