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

Pobieranie id ostatnio dodanego rekordu

0 głosów
69 wizyt
pytanie zadane 21 czerwca w PHP przez Yordano Obywatel (1,100 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 przez VBService Mędrzec (172,560 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 przez Yordano Obywatel (1,100 p.)
próbowałem tak i niestety też nie działa
komentarz 23 czerwca przez Ehlert Ekspert (207,390 p.)
Do takich rzeczy używa się UUID. Opcjonalnie masz też nanoid oraz md5.

2 odpowiedzi

0 głosów
odpowiedź 21 czerwca przez AnimaVillis Gaduła (3,530 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 przez Yordano Obywatel (1,100 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 przez bulgotnik86 Bywalec (2,530 p.)
A wrzuć jeszcze klasę Database
0 głosów
odpowiedź 22 czerwca przez VBService Mędrzec (172,560 p.)
edycja 23 czerwca 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ź 723 wizyt
pytanie zadane 17 stycznia 2018 w SQL, bazy danych przez Bartess Gaduła (3,600 p.)
0 głosów
1 odpowiedź 109 wizyt
0 głosów
2 odpowiedzi 201 wizyt
pytanie zadane 15 lutego 2018 w PHP przez daniel2k Obywatel (1,380 p.)

88,400 zapytań

137,011 odpowiedzi

305,796 komentarzy

58,657 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...