Получить последний вставленный идентификатор в оракуле с PHP - PullRequest
2 голосов
/ 13 июня 2019

У меня есть две таблицы, созданные с этим:

CREATE TABLE t1 (id NUMBER GENERATED AS IDENTITY);
CREATE TABLE t2 (id NUMBER GENERATED AS IDENTITY);

Я вставляю некоторые данные в t1, а затем мне нужно вставить идентификатор, сгенерированный в этой вставке в t2.

Например:

"insert into t1 (name, description) values ('asd','dsa')"
**getting that autogenerated ID
"insert into t2 (idFromt1,name) values (idFromt1,'sarasa')"

Я видел много примеров:

"insert into t1 (name, description) values ('asd','dsa') returning ID into inserted_id";

Но я не могу / не знаю, как извлечь эту переменную "paste_id" из php для второй вставки.

Ответы [ 4 ]

2 голосов
/ 13 июня 2019

Я гуглил о PDO и пришел к этому:

$qry="INSERT INTO t1 (NOMBRE) VALUES ('sarasa') returning ID into :inserted_id";

$parsed = oci_parse($this->conn, $qry);

oci_bind_by_name($parsed, ":inserted_id", $idNumber,32);
oci_execute($parsed);
echo $idNumber;

поэтому я предположил, что oci_bind_by_name был только в одном направлении, но нет. Это сохраняет в переменную $ idNumber сгенерированный идентификатор и было именно то, что мне нужно. Спасибо всем за ваши ответы.

2 голосов
/ 13 июня 2019

Вы можете (должны?) Использовать значение returning.

Например, с PDO:

$query = "insert into t1 (name, description) values ('asd','dsa') returning ID";

$stmt = $pdo->query($query);

$id = $stmt->fetchColumn();
1 голос
/ 13 июня 2019

Использовать PDO :: lastInsertID

Пример:

$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();

Не использовать

SELECT MAX(id) FROM table;

Потому что это небезопасно, если некоторыедругой запрос на вставку будет выполнен до выбора, и он не будет работать для вас в транзакции.

0 голосов
/ 13 июня 2019

Либо используйте PDO::lastInsertId, либо

SELECT MAX(id) FROM table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...