<?php $stmt = $this->_dbHandler->prepare('INSERT INTO news (' . $startDateField . $expireDateField . ' autodelete,' . $imgIntroField . ' user_id, author_name) VALUES (' . $startDateValue . $expireDateValue . $autodelete . ', ' . $imgIntroValue . ' NULL, '' . $author . '')'); if ($stmt->execute() == true) { return true; } else { return false; }; ?>
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:
CREATE OR REPLACE FUNCTION getLastNewsId() RETURNS int AS $$ BEGIN RETURN currval('news_news_id_seq'); END; $$ LANGUAGE plpgsql VOLATILE;
i po INSERT dodałem zapytanie, które zwraca mi ostatnie wprowadzone news_id:
SELECT nextNewsId()
Trochę naokoło, dlatego będę wdzięczny, jeśli ktoś będzie wiedział, co zrobić z tym PDO...