PDO LastInsertId ничего не возвращает

По какой-то причине я не могу получить LastInsertId от моего PDO вставить. Я ничего не получаю обратно, если я помещаю его в команду execute, я получаю -1, потому что запрос на вставку не был выполнен. Однако, когда сразу после выполнения захватывает последний вставленный идентификатор, ничего не возвращается.

php 5.1.6
PECL pdo = 0.1.0

Я посмотрел на следующие вопросы и многие другие вопросы обмена стека.

  1. lastInsertId не работает в Postgresql
  2. PDO lastInsertId () возвращает 0
  3. Проблемы с PDO lastInsertId, php

Однако разница в том, что по сравнению с 0. ничего не возвращается, ошибок также не регистрируется. Смотрите код ниже.

соединение

try {
  $conn = new PDO("pgsql:host=localhost port= dbname=", "", "");
  echo "PDO connection object created";
}
catch(PDOException $e) {
  echo $e->getMessage();
}

вставить / вернуть последний идентификатор

$stmt = $conn ->prepare("INSERT INTO sheet_tbl (site_id,  username, additionalvolunteers) VALUES(?,?,?)"); 
$stmt->bindParam(1,$site_id);
$stmt->bindParam(2,$username1);
$stmt->bindParam(3,$additionalvolunteers);
$site_id = $_POST['site_id'];   
$username1 = $user->name;
$additionalvolunteers = $_POST['additionalvolunteers'];
$stmt ->execute();
$newsheetID = $conn->lastInsertId('sheet_id');
echo $newsheetID . "last id"; 

3 ответа

Вы должны использовать

$newsheetID = $conn->lastInsertId('sheet_id_**seq**');

Просто добавь _seq после идентификатора

Предполагая, что тип sheet_id является SERIAL, вы можете использовать LASTVAL()

ПОПРОБУЙТЕ (не проверено, поскольку у меня нет postgresql)

$newsheetID = $conn->query("SELECT LASTVAL()");
echo $newsheetID . "last id"; 

Я использую postgresql в C# с "RETURNING rowkey", и он всегда работал для меня.
Я также использую pdo/php во многих приложениях.
Однако у меня нет базы данных postgres, открытой на сервере прямо сейчас для тестирования.

Это может работать, но это не проверено.

$site_id = $_POST['site_id'];   
$username1 = $user->name;
$additionalvolunteers = $_POST['additionalvolunteers'];

$stmt = $conn ->prepare("INSERT INTO sheet_tbl (site_id,  username, additionalvolunteers) VALUES(:site_id, :username1, :additionalvolunteers) RETURNING row_id"); 

$success = $stmt->execute([
    'site_id' => $site_id,
    'username1' => $username1,
    'additionalvolunteers' =>  $additionalvolunteers
]);
// unsure about this
$newsheetID =  $stmt->fetchColumn();
echo $newsheetID . " last id"; 
Другие вопросы по тегам