Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PDO::lastInsertId() zwraca true?
Forum PHP.pl > Forum > Bazy danych
czachor
Mam problem... albo jakieś zamrocznie...

  1. <?php
  2. $stmt = $this->_dbHandler->prepare('INSERT INTO news (' . $startDateField . $expireDateField . ' autodelete,' . $imgIntroField . ' user_id, author_name)
  3. VALUES (' . $startDateValue . $expireDateValue . $autodelete . ', ' . $imgIntroValue . ' NULL, '' . $author . '')');
  4.  
  5. if ($stmt->execute() == true)
  6. {
  7. echo '(debug) lastID: ' . $this->_dbHandler->lastInsertId();
  8. return true;
  9. }
  10. else
  11. {
  12. return false;
  13. };
  14. ?>


Całość oczywiście PDO. Zapytanie działa, rekord jest dodawany do bazy. Klucz główny jest na polu 'news_id' (dodawany automatycznie na poziomie bazy - typ SERIAL w postgresie).

lastInsertId" title="Zobacz w manualu php" target="_manual (linia 7) zwraca mi true, a powinno ID (news_id) dodanego właśnie rekordu. Nie wiem już czemu... Czy jest jakieś wymaganie, żeby pole z kluczem głównym nazywało się 'id'? A jeśli tak, to jak to obejść?

Z góry dzięki za pomoc.

--update
próbowałem też użyć RETURNING przy INSERT, ale postgres zwraca błąd (ERROR: syntax error at or near "RETURNING" at character 89).

--update2

Narazie to obszedłem w ten sposób:

  1. CREATE OR REPLACE FUNCTION getLastNewsId()
  2. RETURNS int
  3. AS $$
  4. BEGIN RETURN currval('news_news_id_seq');
  5. END;
  6. $$ LANGUAGE plpgsql VOLATILE;


i po INSERT dodałem zapytanie, które zwraca mi ostatnie wprowadzone news_id:
  1. SELECT nextNewsId()


Trochę naokoło, dlatego będę wdzięczny, jeśli ktoś będzie wiedział, co zrobić z tym PDO...
sf
Cytat
Returns the ID of the last inserted row, or the last value from a sequence object, depending on the underlying driver. For example, PDO_PGSQL() requires you to specify the name of a sequence object for the name parameter.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.