альтернатива mysql_insert_id для postgresql

Используйте moment.js для синтаксического анализа дат:

var caseOne = moment("Jul 8, 2005", "MMM D, YYYY", true).toDate();
var caseTwo = moment("2005-07-08", "YYYY-MM-DD", true).toDate();

Третий аргумент определяет строгий разбор (доступно с 2.3.0). Без него moment.js также может давать неверные результаты.

22
задан Jeffrey04 1 August 2016 в 04:34
поделиться

3 ответа

С точки зрения PostgreSQL, в псевдокоде:

 * $insert_id = INSERT...RETURNING foo_id;-- only works for PostgreSQL >= 8.2. 

 * INSERT...; $insert_id = SELECT lastval(); -- works for PostgreSQL >= 8.1

 * $insert_id = SELECT nextval('foo_seq'); INSERT INTO table (foo...) values ($insert_id...) for older PostgreSQL (and newer PostgreSQL)

pg_last_oid() только работы, где у Вас есть OIDs. OIDs были прочь по умолчанию начиная с PostgreSQL 8.1.

Так, в зависимости от которой версии PostgreSQL Вы имеете, необходимо выбрать один из вышеупомянутого метода. Идеально, конечно, пользуйтесь библиотекой абстракции базы данных который краткие обзоры далеко вышеупомянутое. Иначе, в низкоуровневом коде, это похоже:

Метод один: ВСТАВИТЬ... ВОЗВРАТ

// yes, we're not using pg_insert()
$result = pg_query($db, "INSERT INTO foo (bar) VALUES (123) RETURNING foo_id");
$insert_row = pg_fetch_row($result);
$insert_id = $insert_row[0];

Метод два: ВСТАВЬТЕ; lastval ()

$result = pg_execute($db, "INSERT INTO foo (bar) values (123);");
$insert_query = pg_query("SELECT lastval();");
$insert_row = pg_fetch_row($insert_query);
$insert_id = $insert_row[0];

Метод три: nextval (); ВСТАВЬТЕ

$insert_query = pg_query($db, "SELECT nextval('foo_seq');");
$insert_row = pg_fetch_row($insert_query);
$insert_id = $insert_row[0];
$result = pg_execute($db, "INSERT INTO foo (foo_id, bar) VALUES ($insert_id, 123);");

, самая безопасная ставка была бы третьим методом, но это является громоздким. Самое чистое является первым, но необходимо было бы выполнить недавний PostgreSQL. Большинство библиотек абстракции дб еще не использует первый метод все же.

43
ответ дан Chetan Gawai 29 November 2019 в 04:09
поделиться

Проверьте ВОЗВРАЩАЮЩИЙСЯ дополнительный пункт для оператора INSERT. (Свяжитесь с официальной документацией PostgreSQL)

, Но в основном, Вы делаете:

INSERT INTO table (col1, col2) VALUES (1, 2) RETURNING pkey_col

и сам оператор INSERT возвращает идентификатор (или безотносительно выражения, которое Вы определяете) затронутой строки.

3
ответ дан aib 29 November 2019 в 04:09
поделиться

С php.net:

$res=pg_query("SELECT nextval('foo_key_seq') as key");
$row=pg_fetch_array($res, 0);
$key=$row['key'];
// now we have the serial value in $key, let's do the insert
pg_query("INSERT INTO foo (key, foo) VALUES ($key, 'blah blah')");

Это должно всегда обеспечивать уникальный ключ, потому что ключ, полученный от базы данных, никогда не будет получаться снова.

3
ответ дан Vertigo 29 November 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: