LAST_INSERT_ID() - Falsche Nummer

oldputz1990

Erfahrenes Mitglied
Hallo!

Bei meiner Bildergallery, wird beim Hochladen der Bilder keine Dateinname miteingetragen, sondern die ID des Datensatzes (Jedes Bild - eigener Datensatz) ist der Dateiname.

d.h. 51.jpg, 52.jpg, ....

Im Uploadscript wird als erstens der letzte Wert in der Tabelle abgerufen; mittels dieser Funktion:

PHP:
function get_current_id($table)
{
    $q = "SELECT LAST_INSERT_ID() FROM $table";
    return mysql_num_rows(mysql_query($q)) + 1;
}

Auszug:
PHP:
$current_fotoid = get_current_id(fotos);

       
      $small = 'gallery/'.$id.'/small/'.$current_fotoid.'.jpg';

      $medium = 'gallery/'.$id.'/medium/'.$current_fotoid.'.jpg';

      $big = 'gallery/'.$id.'/big/'.$current_fotoid.'.jpg';

       

        scaleimage(1024);

          if (copy($upload_bild, $big))

             echo "  - Bild wurde erfolgreich auf 1024px verkleinert.\n";

             

          scaleimage(700);

          if (copy($upload_bild, $medium))

             echo "   - Bild wurde erfolgreich auf 700px verkleinert.\n";
 
               

          scaleimage(175);

          if (move_uploaded_file($upload_bild, $small))

             echo "   - Bild wurde erfolgreich auf 175px verkleinert.\n";


Anschließend folgt dann der Insert Befehl:

PHP:
$insert = mysql_query("INSERT INTO `fotos` (`uploader`, `size`, `album`, `time`) VALUE ('$benutzer', '$size', '$id', '$time')")

             OR DIE(mysql_error());

Beim EIntragen wird als ID der Auto Increment Wert hergenommen.


Das Problem ist, dass die ID, des Datensatz anders ist, als der Dateiname.

Hat jemand dafür eine Erklärung?

Danke!
 
Mysql_num_rows gibt dir nicht das gewünschte Ergebniss. Versuche es so:

PHP:
function get_current_id($table)
{
    $q = "SELECT COUNT(ID) FROM $table";
    $anzahl = mysql_fetch_assoc(mysql_query($g));
    return $anzahl + 1;
}
 
Mysql_num_rows gibt dir nicht das gewünschte Ergebniss. Versuche es so:

PHP:
function get_current_id($table)
{
    $q = "SELECT COUNT(ID) FROM $table";
    $anzahl = mysql_fetch_assoc(mysql_query($g));
    return $anzahl + 1;
}

Kleine Verbesserung: MAX(ID) statt COUNT(ID), falls zwischendurch ein Datensatz gelöscht werden sollte.
 
Du kannst auch einfach bei einem Auto Increment den nächsten Wert der Tabelle auslesen. Das ist meines Wissens nach auch eine recht sichere Variante, da dieser Wert ja von der Datenbank selbst vergeben wird.

PHP:
// nächste zu vergebende ID von mySQL herausfinden
$auto_increment_query = mysql_query("SHOW TABLE STATUS LIKE 'tabellenname'");
$auto_increment_result = mysql_fetch_assoc($auto_increment_query);
$auto_increment = $auto_increment_result['Auto_increment'];

Lg,
Manuel
 
Hallo!

Danke für eure Antworten!

Hat leider nicht funktioniert:

HTML:
<b>Warning</b>:  mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in <b>/www/htdocs/w0032001/functions.inc.php</b> on line <b>21</b><br />

@ShadowMan:
Ja, das wollte ich ja auch mit meiner Funktion, den Auto Increment Wert auslesen, +1 == der nächste Datensatz.


Ich habe das Ganze jetzt noch um ein Stückchen einfacher gelöst. Die ID in der Datenbank wird nun auch eingetragen.
PHP:
$insert = mysql_query("INSERT INTO `fotos` (`id`, `uploader`, `size`, `album`, `time`) VALUE ('$current_fotoid', '$benutzer', '$size', '$id', '$time')")


Danke für eure Vorschläge!
 
Hi.

Warum schreibst du den Datensatz nicht zuerst in die DB, dann kannst du dir im Fehlerfall auch die Kopiererei und Skaliererei sparen.

Außerdem hast du auf diese Weise die korrekte ID:
SQL:
insert into ... ; select last_insert_id();
Gruß
 
Sehe ich ebenso wie mein Vorredner.

Aber mal eine andere Frage: Woher bekommst du denn jetzt den Wert $current_fotoid? Darum ging es doch diesen auszulesen oder nicht?

Lg,
Manuel
 
Zurück