Ergebnis 1 bis 13 von 13

Thema: auto_increment id vor insert abfragen

  1. #1
    TP-Senior
    Registriert seit
    Jul 2002
    Ort
    Wien
    Beiträge
    144

    auto_increment id vor insert abfragen

    wie kann ich denn die nächste zu vergebende auto_increment id abfragen (jedoch vor dem insert).

    $id = mysql_insert_id();
    kenn ich, aber das funtioniert ja nur nach dem insert befehl.

    ich hätte die id aber gerne vor dem insert abgefragt, damit ich sie auch in einem anderen feld in die db eintragen kann.

  2. #2
    TP-Veteran Avatar von Scriff
    Registriert seit
    Nov 2002
    Ort
    bei Stuttgart (Esslingen)
    Beiträge
    1.360

    re


    PHP-Code:
    <?php
    // Es wird davon ausgegangen, daß $host, $user und
    // $passwort korrekt initialisiert sind

    // Verbindung zu MySQL-Datenbank herstellen oder sterben.
    $linkID mysql_connect($host,$user,$password)
       or die(
    "Abbruch: Verbindung zu Host '$host' konnte"
             
    ." nicht hergestellt werden.");                  

    // Benötigte Datenbank auswählen oder sterben.
    @mysql_select_db("foo")
       or die(
    "Abbruch: Datenbank '$database' konnte nicht"
             
    ." selektiert werden.<br><br>MySQL sagt: ".mysql_error());

    // INSERT ausführen           
    @mysql_query("INSERT bar SET INHALT='dritter Datensatz'");


    echo 
    mysql_insert_id($linkID);
    ?>
    Geändert von Scriff (30.11.2002 um 19:00 Uhr)

  3. #3
    TP-Senior
    Registriert seit
    Jul 2002
    Ort
    Wien
    Beiträge
    144
    danke scriff, aber so bekomme ich die gerade vergebene id ja erst nach dem insert
    ich bräuchte die id vorher, damit ich die id beim eintrag in die db noch in ein weiteres feld schreiben kann.
    hoff, dass is nicht ganz unverständlich was ich vorhab.

    vielleicht noch zur erklärung: in die db werden u.a. die namen von upgeloadeten bildern eingetragen. die eingetragenen bildnamen sollen nach der id benannt werden.

    könnte jetzt natürlich noch ein update hinterherschicken und das feld ändern, aber das muss doch noch einfacher gehen.

  4. #4
    TP-Greis
    Registriert seit
    Jun 2001
    Beiträge
    5.469
    Wo ist das Problem? Du schreibst den ersten Datensatz in die Tabelle, liest per last_insert_id() den entsprechenden Wert aus und nimmst diesen im darauf folgenden Insert als manuell vergebene ID. Du kannst ja eh keine zwei Queries zur gleichen Zeit absetzen.

  5. #5
    TP-Senior
    Registriert seit
    Jul 2002
    Ort
    Wien
    Beiträge
    144
    nöö, nöö ich will eh nur einen query absetzen,

    PHP-Code:
    $ausgabe explode ("."$bildname); //dateiendung checken
    $bildname time().".".$ausgabe[1];  //bildnamen zusammensetzen

    // Speichern der Daten ############################
    if($status == true) {
    $anfrage "INSERT INTO eventz (titel,ort,datum,line_up,details,flya) VALUES ('$titel','$ort','$datum','$line_up','$text','$bildname')"
    bei obigen script wird der bildname aus der time-funktion generiert. ich hätte aber gern, dass der bildname gleich der id ist.
    und zwar soll die id der zeile in die gerade der insert läuft auch als bildname eingetragen werden.

  6. #6
    TP-Veteran Avatar von Scriff
    Registriert seit
    Nov 2002
    Ort
    bei Stuttgart (Esslingen)
    Beiträge
    1.360
    PHP-Code:

    $result 
    mysql_query("SELECT id FROM table"); 
    while(
    $row mysql_fetch_row($result))
       {
    $next=$row[0];
    }
    $next++;
    echo 
    $next
    oder

    PHP-Code:
    $next=LAST_INSERT_ID($result);
    $next++;
    echo 
    $next// die nächste kommende auto ID 

    Geändert von Scriff (30.11.2002 um 23:17 Uhr)

  7. #7
    TP-Specialist Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    Um Infos über deine Tabelle zu erfahren kannst du das hier benutzen:
    Code:
    SHOW  TABLE  STATUS  FROM 'tabellenname' // ACHTUNG FUNKTIONIERT NICHT IN DER AKTUELLEN PHPMYADMIN VERSION!
    
    dort funktioniert aber:
    SHOW TABLE STATUS LIKE 'tabellenname' // DAS FUNKTIONIERT
    http://www.mysql.com/doc/en/SHOW_TABLE_STATUS.html

    Gruss Jan

  8. #8
    TP-Greis
    Registriert seit
    Jun 2001
    Beiträge
    5.469
    Beim Versuch, die nächste per auto_increment erzeugte ID auszulesen, ist aber zu beachten, dass MySQL kein "Commit" für abgesetzte Insert-Queries kennt - die entsprechende Tabelle wird beim Schreib-Zugriff also nicht gesperrt, ergo kann während des Insert schon ein anderer Prozess auf die Tabelle zugreifen und die ausgelesene ID ungültig machen.

  9. #9
    TP-Specialist Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    Da muss ich dem Herrn Lars natürlich Recht geben. Allerdings besteht durch Tablelocking die Möglichkeit wärend des Programmablaufs das ändern der Tabelle durch andere Prozesse zu verhindern, bis man diese Tabelle wieder freigibt.

    LOCK TABLES Tabellenname WRITE
    ...
    UNLOCK TABLES

  10. #10
    TP-Specialist Avatar von mike
    Registriert seit
    Jan 2002
    Ort
    TP/Dynamik
    Beiträge
    2.876
    man möge die augen auf PEAR richten und hier auf db::nextID()
    das bedeutet zwar, dass du dir deine autoincrements selber erzeugen musst, aber würde dein problem auf elegante weise lösen.
    Gehelft? Hier kannst du dich bedanken.

    mike

  11. #11
    seb
    seb ist offline
    TP-Veteran
    Registriert seit
    Jan 2002
    Beiträge
    1.741
    Mal was ganz anderes:
    Wieso drehst Du die Abfolge (Datensatz Schreiben > Datei kopieren) nicht einfach um?
    Dann hättest Du die ID per last_insert_id() und könntest deinen Dateinamen wie gewünscht erzeugen.

  12. #12
    TP-Greis
    Registriert seit
    Jun 2001
    Beiträge
    5.469
    ... wie auch etwas weiter oben bereits anzumerken pflegte.

  13. #13
    TP-Senior
    Registriert seit
    Jul 2002
    Ort
    Wien
    Beiträge
    144
    @seb/lars
    die abfolge ändern löst mein problem leider auch nicht.
    ich kann zwar das bild mittels last_insert_id() benennen, aber diese id wollte ich im vorherigen insert ja schon in die datenbank eintragen.
    mein ziel war: wird ein bild upgeloadet dann soll der bildname gleich der id sein (plus extension), wenn nicht dann ist bildname 0.jpg (siehe unten)

    id| titel | ort | ....... | flya
    3 | xyz |vcv | ....... | 3.gif //hier gleich id
    6 | dfv | dfs | ....... | 0.jpg //kein bildupload --> 0.jpg
    7 | sdf | sfs | ....... | 7.jpg //hier gleich id


    habs jetzt mit

    SHOW TABLE STATUS FROM 'tabellenname' und einem tablelocking dazu gelöst:
    PHP-Code:
        mysql_query("LOCK TABLES eventz WRITE");  

    $result mysql_query("SHOW TABLE STATUS LIKE 'eventz' "); //ACHTUNG nur für aktuelle Phpversion.sonst : SHOW  TABLE  STATUS  FROM 'tabellenname' verwenden!!!!!! 
    $daten mysql_fetch_array($result);
    $current_id "$daten[Auto_increment]";

    $ausgabe explode ("."$userfile_name);
    $userfile_name $current_id.".".$ausgabe[1]; 
    ....
    $anfrage "INSERT INTO eventz (titel,ort,datum,line_up,details,flya) VALUES ('$titel','$ort','$datum','$line_up','$text','$bildname')";
    ....
    mysql_query("UNLOCK TABLES"); 
    hoff das ist jetzt nicht mit der kirche ums kreuz aber es funkt wunderbar.

    vielen dank leute ...

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51