Oznámení
RETURNING id s postgresql
před 3 lety
- Facedown
- Člen | 38
Ahoj,
potřebuji vrátit právě vložené ID. Zkoušel jsem metodu lastInsertId,
která nefungovala a vyhodila mi vyjímku Dibi\Exception: Cannot
retrieve last generated ID.
Hledal jsem a našel jsem syntaxi s RETURNING id. Můj kód vypadá takto:
$id = $this->database->query(
'INSERT INTO subscribers(email, password) VALUES
(?, ?) RETURNING id',
$email,
$this->cipher->encrypt($password)
);
$this->database je objekt typu Dibi\Connection
Zkoušel obraty jako query(…)->fetchSingle() nebo pouze
fetchSingle(…), ale bez úspěchu.
V prvním případě s query(…)->fetchSingle() dostanu
error Call to a member function fetchSingle() on integer,
v druhém případě zase dostanu ID s 0.
Kód jsem vložil přímo do admineru a fungovalo to v pohodě.
Postgres zkouším poprvé, takže je možné, že dělám někde fatální chybu.
Díky za odpověd.
před 3 lety
- Milo
- Nette Core | 1119
S Dibi 3.0.5 funguje dobře:
<?php
require __DIR__ . '/vendor/autoload.php';
$db = new Dibi\Connection([
'driver' => 'postgre',
'host' => 'localhost',
'username' => 'test',
'password' => '*****',
'dbname' => 'test',
]);
$id = $db->query('INSERT INTO book (title) VALUES (?) RETURNING id', 'Dibi')->fetchSingle();
var_dump($id);
před 3 lety
- Facedown
- Člen | 38
Milo napsal(a):
S Dibi 3.0.5 funguje dobře:
<?php require __DIR__ . '/vendor/autoload.php'; $db = new Dibi\Connection([ 'driver' => 'postgre', 'host' => 'localhost', 'username' => 'test', 'password' => '*****', 'dbname' => 'test', ]); $id = $db->query('INSERT INTO book (title) VALUES (?) RETURNING id', 'Dibi')->fetchSingle(); var_dump($id);
Už mi to jde, měl jsem jako driver nastaven pdo. Myslel jsem, že se pdo používá napříč různými databázemi, z jakého důvodu mi to tedy nefungovalo? Jinak, díky :)
před 3 lety
- Milo
- Nette Core | 1119
Nevím přesně proč (asi protože se u PDO nedá snadno zdetekovat, že výsledkem SQL dotazu je result set), dělá dibi detekci a pro INSERT natvrdo vrací integer.