• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pobieranie id ostatnio dodanego rekordu

42 Warsaw Coding Academy
0 głosów
688 wizyt
pytanie zadane 21 czerwca 2022 w PHP przez jakubjordanek Obywatel (1,340 p.)

Cześć, robię obecnie system przesyłania plików na stronę i chciałbym, żeby plik miał nazwę taką jak id rekordu w sql. Czyli wypełniam cały formularz klikam "Upload" i dodaje się nowy rekord do bazy danych i przesyła plik i ten plik ma nazwę równą temu id dodanego za pomocą auto_increment oczywiście. Niestety funkcja insert_id nie chcę działać i zawsze pokazuje 0. Czy ma ktoś jakiś pomysł na rozwiązanie tego problemu? Załączam część kodu i zdjęcie struktury bazy.

<?php
    class Upload extends Database
    {
        public function uploadFile($id, $title)
        {
            $status = true;

            if (empty($title))
            {
                $status = false;
            }

            if ($_FILES["file"]["size"] == 0)
            {
                $status = false;
            }

            if ($status)
            {
                $sql = "INSERT INTO library VALUES (NULL, ".$id.", NULL, '".$title."', '".date("Y-m-d")."')";
                if ($this->connect()->query($sql))
                {
                    move_uploaded_file($_FILES["file"]["tmp_name"], "library/".$this->connect()->insert_id.".mp3");
                    echo $this->connect()->insert_id;
                }
            }
            else
            {
                header("Location: ../upload.php");
                exit();
            }
        }
    }
?>

komentarz 21 czerwca 2022 przez VBService Ekspert (256,600 p.)

A gdy zapiszesz tak sql-a

$sql = "INSERT INTO library (`artist_id`, `title`, `date`) "
     . "VALUES ($id, '$title', '".date('Y-m-d')."')";

 

komentarz 21 czerwca 2022 przez jakubjordanek Obywatel (1,340 p.)
próbowałem tak i niestety też nie działa
komentarz 23 czerwca 2022 przez Ehlert Ekspert (215,010 p.)
Do takich rzeczy używa się UUID. Opcjonalnie masz też nanoid oraz md5.

2 odpowiedzi

0 głosów
odpowiedź 21 czerwca 2022 przez AnimaVillis Stary wyjadacz (13,410 p.)
Może na okrętkę, ale spróbowałbym najpierw pobrać ostatnie ID, które masz w bazie i na jego podstawie przypisywał odpowiednio id do pliku uwzględniając inkrementacje w bazie danych :)
komentarz 21 czerwca 2022 przez jakubjordanek Obywatel (1,340 p.)
zadziałał ten sposób jednak wolałbym się zorientować wokół insert_id i dowiedzieć się czemu nie działa
2
komentarz 22 czerwca 2022 przez bulgotnik86 Gaduła (3,040 p.)
A wrzuć jeszcze klasę Database
0 głosów
odpowiedź 22 czerwca 2022 przez VBService Ekspert (256,600 p.)
edycja 23 czerwca 2022 przez VBService

Prawdopodobnie jest problem w(z) $this->connect()

@bulgotnik86

A wrzuć jeszcze klasę Database

 

próbowałeś taki workaround

SELECT id AS `insert_id` FROM library WHERE id = LAST_INSERT_ID()

 

$sql = "INSERT INTO library VALUES (NULL, ".$id.", NULL, '".$title."', '".date("Y-m-d")."')";
if ($this->connect()->query($sql))
{
    $sql = "SELECT id AS `insert_id` FROM library WHERE id = LAST_INSERT_ID()";
    $res = $this->connect()->query($sql); 
    // itd.

    // ...
}

 

Podobne pytania

0 głosów
1 odpowiedź 1,783 wizyt
pytanie zadane 17 stycznia 2018 w SQL, bazy danych przez Bartess Gaduła (3,630 p.)
0 głosów
1 odpowiedź 240 wizyt
0 głosów
2 odpowiedzi 1,131 wizyt
pytanie zadane 15 lutego 2018 w PHP przez daniel2k Obywatel (1,380 p.)

93,377 zapytań

142,380 odpowiedzi

322,529 komentarzy

62,727 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...