вернуть идентификатор из базы данных после вставки - PullRequest
0 голосов
/ 23 марта 2012

У меня есть php, который отвечает на ajax и вставляет строку в базу данных, это код

if($action == "insertCalendarEvents") {
        $calendar_group = $_GET["calendar_group"];
        $event_name = "'" . $_GET["event_name"] . "'";
        $event_datestart = "'" . $_GET["event_datestart"] . "'";
        $event_datestop = "'" . $_GET["event_datestop"] . "'";
        $event_timestart = $_GET["event_timestart"] != "" ? "'" . $_GET["event_timestart"] . "'" : "null";
        $event_timestop = $_GET["event_timestop"] != "" ? "'" . $_GET["event_timestop"] . "'" : "null";
        $event_info = "'" . $_GET["event_info"] . "'";

        require_once("connect.php");
        $query = "INSERT INTO calendar_events (calendar_group, event_name, event_datestart, event_datestop, event_timestart, event_timestop, event_info) VALUES (" . $calendar_group . ", " . $event_name . ", " . $event_datestart . ", " . $event_datestop . ", " . $event_timestart . ", " . $event_timestop . ", " . $event_info . ")";
        $result = pg_query($connect, $query);
        if(!$result)
            die("error 1"); // query error
    }

что я хочу добиться, чтобы этот код возвращал идентификатор, который база данных автоматически увеличивала, и возвращал его обратно в функцию ajax, проблема в том, что я не могу получить последний идентификатор, потому что кто-то другой может вставить данные после меня и получите неправильный идентификатор .. я был бы рад узнать, есть ли решение этой проблемы Заранее спасибо, Даниэль!

РЕДАКТИРОВАТЬ: я хочу добавить, что я использую PostgreSQL в качестве базы данных, может быть, у него есть модуль для этого

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Проверка http://wiki.postgresql.org/wiki/FAQ#How_do_I_get_the_value_of_a_SERIAL_insert.3F, кажется, что вы можете делать запросы вроде:

INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id

Я предполагаю, что вы вызываете pg_fetch_assoc () для ресурса запроса и рассматриваете его как SELECT?

0 голосов
/ 23 марта 2012

используйте @@ identity или scope_identity для получения последнего введенного вами индекса.

после вашего оператора вставки используйте select @@identity

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

...